2015-03-16 4 views
0

У меня есть эта таблица «слова» с дополнительной информацией:SQL - Выберите отчетливый на две колонки

+---------+------------+----------- 
| ID  |ID_CATEGORY | ID_THEME | 
+---------+------------+----------- 
| 1  |  1  |  1 
| 2  |  1  |  1 
| 3  |  1  |  1 
| 4  |  1  |  2 
| 5  |  1  |  2 
| 6  |  1  |  2 
| 7  |  2  |  3 
| 8  |  2  |  3 
| 9  |  2  |  3 
| 10  |  2  |  4 
| 11  |  2  |  4 
| 12  |  3  |  5 
| 13  |  3  |  5 
| 14  |  3  |  6 
| 15  |  3  |  6 
| 16  |  3  |  6 

И этот запрос, который дает мне 3 случайных идентификаторами из разных категорий, но не из разных тем тоже:

SELECT Id 
FROM words 
GROUP BY Id_Category, Id_Theme 
ORDER BY RAND() 
LIMIT 3 

То, что я хочу, как результат:

+---------+------------+----------- 
| ID  |ID_CATEGORY | ID_THEME | 
+---------+------------+----------- 
| 2  |  1  |  1 
| 7  |  2  |  3 
| 14  |  3  |  6 

То есть, не повторить ни одна категории или темы.

+0

Попробуйте использовать GROUP BY следующим образом: http://stackoverflow.com/a/54430/2717958 – Michal

+1

Общее правило GROUP BY гласит: «Если указано предложение GROUP BY, каждая ссылка столбца в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора ». Столбец id не следует этому. – jarlh

+0

в первой строке -> 2 1 1 или 1 1 1 .... @ismaestro –

ответ

1

Когда вы используете GROUP BY, вы не можете включить в список выбора столбец, который не заказывается. Таким образом, в вашем запросе невозможно отобразить Id в списке выбора.

Так что вам нужно сделать что-то немного более сложное:

SELECT Id_Category, Id_Theme, 
    (SELECT Id FROM Words W 
     WHERE W.Id_Category = G.Id_Category AND W.Id_Theme = G.Id_Theme 
     ORDER BY RAND() LIMIT 1 
    ) Id 
FROM Words G 
GROUP BY Id_Category, Id_Theme 
ORDER BY RAND() 
LIMIT 3 

ПРИМЕЧАНИЕ: группы запросов по требуемым столбцам, а подзапрос используется для отбора случайных Id из всех возможных Id с в группа. Затем основной запрос фильтруется, чтобы принимать три случайные строки.

+0

Это не работает для меня. Ошибка не появляется только в пустой веб-странице, может быть, проблема синтаксиса? – Ismaestro

+0

У вас есть менеджер db, например pgAdmin, для запуска запроса и просмотра результатов без веб-приложения посередине? – JotaBe

+0

все работает отлично с запросом sql. Была и другая проблема с PHP ...;) – Ismaestro

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