2010-05-26 19 views
0

j'ai une base de données qui contiennent des données sous cette forme:Obtenez une entrée spécifique par groupe dans 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') 

Donc, comme vous le voyez, le champ Nom est Uniq pas que je peux avoir plusieurs icônes avec la même nom et ils sont séparés avec le champ de taille. Maintenant en PHP J'ai une requête en obtenir un jeu d'icônes, par exemple:

mysql_query("SELECT * FROM icon WHERE tag='".$tag."' ORDER BY size LIMIT 0, 10"); 

Avec cet exemple si étiquette $ contient « twitter » il affichera seulement la première entrée de données SQL avec le tag « twitter », donc ce sera:

(myicon.png, 16, 'twitter') 

C'est ce que je veux, mais je préférerais la taille '128' par défaut. Est-ce possible de dire à SQL de m'envoyer seulement la taille 128 lorsqu'elle existe et sinon une autre taille?

Merci!

Répondre

0

ORDER BY size DESC?

+0

Non car la taille 128 n'est pas nécessairement la dernière donnée. Je pourrais avoir 16, 32, 128, 256 par exemple; donc si j'ajoute DESC il me montrerait 256. – Jensen

1

Vous avez besoin d'une colonne supplémentaire pour commander en plaçant la valeur préférée en haut. Par exemple, vous pouvez faire quelque chose comme ceci:

SELECT 
    * 
FROM 
    icon 
WHERE 
    tag='whatever' 
ORDER BY 
    case size when 128 then 1 else 0 end desc, 
    size desc 
LIMIT 0, 10 

La nouvelle order by clause met votre taille préférée d'abord (car il est le seul qu'il attribue un 1 à), et ordonne alors le reste d'entre eux par leur taille réelle , le plus grand en premier.

+0

Woow, je ne suis pas sûr de comprendre tout votre code. Je vais faire un test. – Jensen

+0

Hmm qui n'a pas fonctionné. Pourriez-vous m'expliquer plus de pls? – Jensen

+0

Dans votre exemple, quelle est la colonne supplémentaire? Et ce qu'elle contient? – Jensen