2015-04-21 4 views
3

Я создаю блог со многими различными категориями, и на моей домашней странице я хотел бы показать одно сообщение из каждой категории (кроме, может быть, «ошибочное») m не уверен, есть ли для этого простое однострочное решение. Я надеюсь на что-то вроде:PHP/MySQL - выберите один из каждого типа в таблице

"SELECT * FROM blogs WHERE cat != 'misc' ORDER BY added LIMIT (ONE OF EACH CAT TYPE)" 

Возможно ли это как можно?

+2

'group by category'? –

ответ

5

Просто GROUP BY категория -

SELECT * 
FROM blogs WHERE cat != 'misc' 
GROUP BY cat 
ORDER BY added 
+0

Это все равно будет извлекать все записи, а не только одну запись (хотя она отображает только одну запись), и, следовательно, может занять больше времени на большой таблице, чем вручную получать через LIMIT? Или мое мышление не так? – kero

+0

Он извлекает их все, но покажет по одной категории. Тот, который он показывает, может быть случайным. Поскольку мы действительно не знаем, что OP хочет в качестве вывода, было бы трудно сказать, кроме этого. –

+0

Благодаря @JayBlanchard, он показывает только один тип каждой категории. В идеале мне бы хотелось показать последнюю, т. Е. 'order by 'added' desc' –

1

Если вы хотите, чтобы найти самую новую запись в каждой категории, вы будете иметь, чтобы выяснить, какая запись является новейшим, а затем присоединиться, чтобы вернуться к нему - вы можете сделать это с подвыборкой, при необходимости:

SELECT b.* 
FROM blogs `b` 
INNER JOIN (SELECT `category`, MAX(`added`) AS `max_add` FROM `blogs` GROUP BY `category` WHERE `category` != 'misc') `a` 
ON `a`.`category` = `b`.`category` AND `a`.`max_add` = `b`.`added` 

(или что-то подобное - лучше присоединиться на ПК, если это возможно)

This question дает довольно подробный ответ на общую проблему.

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