2009-08-12 3 views
1

У меня возникла проблема в сортировке результатов объединения таблиц, которые необходимо сгруппировать в Mysql.Группировка по порядку с присоединением таблиц

Это моя установка таблиц.

Владельцы Таблица

  • owner_id | owner_name
  • 1 | Владелец испытания 1
  • 2 | Владелец испытания 2
  • 3 | владелец Тест 3

изображений загрузить таблицу

  • image_id | image_name | владелец | upload_date
  • 1 | image1.jpg | 2 | 04-08-2009
  • 2 | image2.jpg | 1 | 04-08-2009
  • 3 | image3.jpg | 3 | 04-08-2009
  • 4 | image4.jpg | 1 | 04-08-2009
  • 5 | image5.jpg | 3 | 04-08-2009

Поле owner_id является автоматическим приращением, а также полями image_id.

То, что я пытаюсь сделать, это получить имя владельца за последние три загруженных изображения, но не того же владельца. Поэтому в этом примере я хотел бы, чтобы он возвращал следующие результаты.

владелец Тест 3 владелец Тест 1 владелец Тест 2

В этом примере последний владелец, чтобы загрузить является владельцем Test 3, то владелец Тест 1, то владелец Тест 2.

Я использую следующий запрос но он не вернет правильные результаты.

$sql = "SELECT u.*, s.* FROM UPLOAD_TBL u, OWNER_TBL s WHERE u.ownerid = s.owner_id 
GROUP BY s.owner_id ORDER BY u.image_id DESC LIMIT 0, 3"; 

Любая помощь при настройке этого запроса будет принята с благодарностью.

+0

Как выглядит ваш оператор SELECT сейчас? – RKitson

ответ

1

Смотрите, если вы можете сортировать по агрегированной ID изображения:

select s.owner_id, s.owner_name, max(u.imag_id) as last_image_id 
from UPLOAD_TBL u 
inner join OWNER_TBL s on s.ownerid = u.owner_id 
group by s.owner_id, s.owner_name 
order by last_image_id desc 
limit 3 
+0

Это прекрасно. Спасибо! Прекрасно работает. – 2009-08-12 06:14:38

+0

Решил мою проблему тоже. благодаря –

1

Вы должны просто группа по owner_id и сортировать по UPLOAD_DATE DESC с LIMIT 3

+0

Спасибо за ответ. Я попробовал следующее, но это не дало правильного результата. $ sql = "SELECT u. *, S. * FROM UPLOAD_TBL ​​u, OWNER_TBL s WHERE u.ownerid = s.owner_id GROUP BY s.owner_id ORDER BY u.image_id DESC LIMIT 0, 3" ; – 2009-08-12 05:13:08

+0

вы используете псевдонимы и они Тед скрестить глаза, но я, что ваше ГДЕ неуместен Как насчет SELECT * FROM OWNER_TBL LEFT JOIN UPLOAD_TBL ​​ON owner_id = OwnerId GROUP BY owner_id ORDER BY image_id DESC ПРЕДЕЛ 3 если изменить имя OwnerId к owner_id во 2-й таблице вы можете использовать более простой LEFT JOIN UPLOAD_TBL ​​ИСПОЛЬЗОВАНИЕ (owner_id) (или любой другой присоединиться) Sequ3L ответ выглядит более элегантно, хотя вы должны используйте EXPLAIN, чтобы узнать, какой из них быстрее –

+0

Благодарим также за помощь. Это было также на пути к тому, что мне нужно. :) – 2009-08-12 06:15:37

1

Как о чем-то вроде:

select 
    distinct(owner_id), owner_name 
from 
    owner 
inner join 
    images on images.ownerid = owner.ownerid 
order by 
    images.upload_date desc limit 3
+0

Я нет SQL-man, но не должно быть «FROM owner, images», поскольку вы «вызываете изображения позже? Кроме того, учитывая желаемые результаты, левого соединения должно быть достаточно, нет? – KdgDev

Смежные вопросы