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

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 |
------------------------------
Необходимо выбрать имя с первой таблицы, и независимо сколько картинок имеется у юзера выбрать одну (любую).
 
Код:
group by name
но вариант так себе ))
DISTINCT - поудачнее будет.
 
  • Нравится
Реакции: Waki
так можно ведь проще, если обязательно у пользователя должно быть хотя бы одна картинка, то надо просто заменить тип join table на inner
это будет работать намного быстрее
 
Вот вариант с возможностью сортировки картинки (если вместо 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
 
не разобрался как сделать с distinct, сделал с group by name
спасибо.
лучше group by u.id
в любом случае это лучше чем дистинкт, т.к. бывают странности при более сложных запросах и использовании индексов.

Вот вариант с возможностью сортировки картинки (если вместо 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
откуда такая фантазия? :) подзапросы куда хуже джойнов во всех отношениях. да и еще к тому ORDER BY + LIMIT убивают всякую надежду на использование индексов.
 
Назад
Сверху