2013-09-16 4 views
1

Цель: Присоедините две таблицы, упорядоченные по одному столбцу (ui.UNO), а затем GROUP BY (images.INO).Запрос на несколько таблиц ORDER BY Then GROUP BY

Проблема: ORDER BY возвращает повторяющиеся результаты, как и следовало ожидать, но поскольку я пытаюсь выполнить ORDER BY, чтобы отобразить текущие изображения пользователей, если i GROUP BY показан только первый результат, независимо от того, связано ли оно с другого пользователя.

например: В следующей таблице я ищу второй результат, но если я использую GROUP BY, будет отображаться только первый результат, и любые связанные данные (ui.IUTally) будут ошибочными. Спасибо за вашу помощь заранее.

Images       
    INO | IName | IDescription 
    3  | Sports | "......"  
    3  | Sports | "......" 

UI 
    UNO | INO  | IUTally 
    4  | 3  | 12 
    7  | 3  | 6 

.

$query=" 
SELECT images.INO, images. IName, ui. UNO, ui. IUTally 
FROM images 
LEFT JOIN ui ON images. INO = ui. INO 
GROUP BY images. INO 
ORDER BY ui. UNO = $uno DESC"; 

Images/UI       
    INO | IName | UNO | INO  | IUTally 
    3  | Sports | 4  | 3  | 12 
    3  | Sports | 7  | 3  | 6 
+0

Я думаю, вы смешиваете предложение GROUP BY и 'WHERE'. Поскольку вы заказываете «ui.UNO = $ uno», он сначала проверяет, истинно это или нет, а затем возвращает 1 или 0. –

+0

Что вы ожидали результата? – Shafeeque

+0

Привет, Марти, я не уверен, что получаю то, что вы на 100%, если я не использую GROUP BY, я получаю повторяющиеся результаты, единственная причина, по которой я думаю о GROUP BY, состоит в том, что она делает то, что мне нужно, но не в сочетании с ORDER BY, так что это похоже либо или, либо альтернатива. Спасибо за вашу помощь. – user2784408

ответ

0

Вот один способ первого заказа результатов затем сгруппировать их, но этот трюк включает подлодку выбора, в одном запросе вы не можете использовать ORDER BY перед GROUP BY так попробовать это один

SELECT q.* FROM (
SELECT images.INO, images. IName, ui. UNO, ui. IUTally 
FROM images 
LEFT JOIN ui ON images. INO = ui. INO 
ORDER BY ui. UNO = $uno DESC 
) q GROUP BY q. INO 

он будет первым заказом ваши результаты, а затем группировать их

+0

Спасибо Dianuj, я попробую и отчитаю. – user2784408

+0

Я пробовал ваш код Dianuj, но не повезло, ORDER BY переопределяется GROUP BY, спасибо за вашу помощь в любом случае. – user2784408

+0

Просто примечание, результат переупорядочивается по возрастанию с помощью ORDER BY, если это помогает? – user2784408

0

Для того, чтобы просмотреть данные, связанные с другими пользователями, возможно, придется использовать функцию GROUP_CONCAT в ЗЕЬЕСТЕ, как это.

SELECT images.INO, GROUP_CONCAT(images.IName ORDER BY ui.UNO), GROUP_CONCAT(ui.UNO ORDER BY ui.UNO), GROUP_CONCAT(ui.IUTally ORDER BY ui.UNO) 
FROM images 
LEFT JOIN ui ON images. INO = ui. INO 
GROUP BY images. INO 
ORDER BY ui. UNO = $uno DESC"; 

Сообщите мне, если это поможет или вы ищете что-нибудь еще.

+0

Спасибо, Абхиджит, я отдам его. – user2784408