Получить конкретную запись по группе в SQL
У меня есть база данных, которая содержит некоторые данные в этой форме:
icon(name, size, tag)
(myicon.png, 16, 'twitter')
(myicon.png, 32, 'twitter')
(myicon.png, 128, 'twitter')
(myicon.png, 256, 'twitter')
(anothericon.png, 32, 'facebook')
(anothericon.png, 128, 'facebook')
(anothericon.png, 256, 'facebook')
Итак, как вы видите, поле имени не уникально. У меня может быть несколько значков с одинаковым именем, и они разделены полем размера. Теперь в PHP у меня есть запрос, который получает один значок, например:
mysql_query("SELECT * FROM icon WHERE tag='".$tag."' ORDER BY size LIMIT 0, 10");
В этом примере, если $tag содержит 'twitter', он будет отображать ТОЛЬКО первую запись данных SQL с тегом 'twitter', поэтому это будет:
(myicon.png, 16, 'twitter')
Это то, что я хочу, но я бы предпочел размер "128" по умолчанию. Можно ли сказать, что SQL отправляет мне только 128 размер, если существует, и если нет, другой размер?
Спасибо!
2 ответа
Для заказа необходим дополнительный столбец, в котором предпочтительное значение помещается вверху. Например, вы можете сделать что-то вроде этого:
SELECT
*
FROM
icon
WHERE
tag='whatever'
ORDER BY
case size when 128 then 1 else 0 end desc,
size desc
LIMIT 0, 10
Новый order by
Предложение сначала устанавливает предпочитаемый вами размер (поскольку он назначает 1 только для одного), а затем упорядочивает остальные из них по их фактическому размеру, сначала по величине.