Получить конкретную запись по группе в SQL - PullRequest
0 голосов
/ 26 мая 2010

У меня есть база данных, которая содержит некоторые данные в этой форме:

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 ]

1 голос
/ 26 мая 2010

Вам нужен дополнительный столбец, чтобы упорядочить предпочтительное значение вверху. Например, вы можете сделать что-то вроде этого:

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

0 голосов
/ 26 мая 2010

ORDER BY size DESC * * 1002

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...