У меня есть базы данных, которые содержат некоторые ДАННЫЕ в такой форме:Получить уникальные данные в запросе 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')
Так как вы его видите, поле имени не Uniq я могу иметь несколько значков с одно и то же имя, и они разделены полем размера. Теперь в PHP У меня есть запрос, получить один набор иконок, например:
$dbQueryIcons = mysql_query("SELECT * FROM pl_icon WHERE tag LIKE '%".$SEARCH_QUERY."%' GROUP BY name ORDER BY id DESC LIMIT ".$firstEntry.", ".$CONFIG['icon_per_page']."") or die(mysql_error());
В этом примере, если $ тег содержит «твиттер» будет показана только первая запись данных SQL с тегом «твиттере», так это будет:
(myicon.png, 16, 'twitter')
Это то, что я хочу, но я бы предпочел размер «128» по умолчанию. Можно ли сказать, что SQL отправит мне только размер 128 при существующем и, если не другом размере?
В другом вопросе кто-то дает мне решение с GROUP BY, но в этом случае это не выполняется, потому что у нас есть имя GROUP BY. И если я удалю GROUP BY, он покажет мне все размеры одинаковых значков.
Спасибо!
Ницца, это бег! Спасибо !!! Просто одно. Я видел, что если нет 128-го размера, это показывает, например, первый из них 16. Можно иметь 128 или меньше? Например, если 128 не существует, он показывает мне 64 (если существует) или 32 или 16? Спасибо – Jensen
@Jensen, да, это возможно: 'ORDER BY IF (size = 128, 0, 1), IF (размер <128, 0, 1), размер DESC' - это обеспечит следующий порядок:« 128; то все ниже 128 в порядке убывания, затем все выше 128 в порядке убывания », то есть« 128, 64, 32, 16, 256 » –
Или еще лучше:' ORDER BY IF (размер <= 128, 0, 1) , размер DESC' :) –