Выбор из двух таблиц

Тема в разделе "Базы данных", создана пользователем Waki, 8 дек 2012.

Модераторы: latteo
  1. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21
    Имеется две таблицы в одной данные, в другой картинки,


    Код:
    _____________________
    | id | name | date  |
    ---------------------
    | 1 | 1111  | 111  |
    | 2 | 2222  | 222  |
    | 3 | 3333  | 333  |
    | 4 | 4444  | 444  |
    ---------------------
    

    Код:
    _________________________
    | id | user_id  | pic  |
    -------------------------
    | 1 |    1      | pic1  |
    | 2 |    1      | pic2  |
    | 3 |    2      | pic3  |
    | 4 |    4      | pic4  |
    -------------------------
    


    Пробовал таким запросом:
    Код:
     select u.id, u.name, p.user_id, p.pic from users u left join pics p on u.id=p.user_id 
    но так дублируются записи с юзером, т.е. получается примерно такое:
    Код:
    _____________________________
    | id | name | user_id | pic  |
    -----------------------------
    | 1 | 1111  |    1    | pic1 |
    | 1 | 1111  |    1    | pic2 |
    | 2 | 2222  |    2    | pic3 |
    | 4 | 4444  |    4    | pic4 |
    ------------------------------
    
    Необходимо выбрать имя с первой таблицы, и независимо сколько картинок имеется у юзера выбрать одну (любую).
     
  2. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    Код:
    group by name
    но вариант так себе ))
    
    DISTINCT - поудачнее будет.
     
    Waki нравится это.
  3. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21
    не разобрался как сделать с distinct, сделал с group by name
    спасибо.
     
  4. ВладимирТрой

    ВладимирТрой Постоялец

    Регистр.:
    29 янв 2013
    Сообщения:
    53
    Симпатии:
    19
    так можно ведь проще, если обязательно у пользователя должно быть хотя бы одна картинка, то надо просто заменить тип join table на inner
    это будет работать намного быстрее
     
  5. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Вот вариант с возможностью сортировки картинки (если вместо RAND добавить более конкретное условие выборки)
    Код:
    select u.id, u.name, (SELECT p.pic FROM pics p WHERE p.user_id=u.id ORDER BY RAND() LIMIT 1) as pic FROM users u
     
  6. unknown34

    unknown34 Создатель

    Регистр.:
    8 сен 2008
    Сообщения:
    19
    Симпатии:
    2
    лучше group by u.id
    в любом случае это лучше чем дистинкт, т.к. бывают странности при более сложных запросах и использовании индексов.

    откуда такая фантазия? :) подзапросы куда хуже джойнов во всех отношениях. да и еще к тому ORDER BY + LIMIT убивают всякую надежду на использование индексов.