Получить конкретную запись по группе в 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 только для одного), а затем упорядочивает остальные из них по их фактическому размеру, сначала по величине.

ORDER BY size DESC?

Другие вопросы по тегам