2010-07-17 3 views
0

J'ai une table photos dans la base de données qui utilise une colonne status pour détecter si la photo a été validée ou non ...MySQLi: priorité SELECT en utilisant OU

donc si une photo a une status = 0 alors son non validé, mais si status = 1 alors la photo a été validée.

Je veux ajouter status = 2 pour sélectionner la photo comme la «photo principale Je peux utiliser

SELECT photo WHERE status = 2 

mais s'il n'y a pas de « photo principale » sélectionnée Je veux sélectionner une autre photo, mais donner la priorité à une photo avec un statut = 2 si elle est disponible .. donc je veux utiliser quelque chose comme ceci:

SELECT photo WHERE status = 2 OR status != 2 

.. mais en donnant la priorité à la photo avec le statut 2 ... donc s'il y a une photo avec status 2 il va sélectionner cette photo, mais s'il n'y a pas alors peut sélectionner un y photo ...

Est-ce possible de le faire?

+3

Je comprends pourquoi vous faites que la colonne 'status' fasse double usage, indiquant la validation et la photo principale, mais je vous recommande de ne pas le faire si possible car cela échouerait au test de couloir. Prenez ce que vous faites à n'importe qui, et voyez s'ils comprennent ce qui se passe sans que vous leur expliquiez. Soyez explicite sur vos colonnes - 'validation_status' et' main_photo_ind' devraient être deux, colonnes avec des noms descriptifs. Et les clés étrangères possibles ... –

Répondre

0

Si status=2 est toujours la plus haute priorité:

SELECT photo WHERE status = 2 OR status != 2 FROM your_table_name ORDER BY status 

Ou mieux:

SELECT photo FROM your_table_name ORDER BY status 

parce status = 2 OR status != 2 est tout

+0

Le OR est assez inutile. – Donnie

+0

Copier & Coller de l'auteur – jigfox

0

Essayez ceci:

SELECT photo, status = 2 AS priority 
FROM table 
ORDER BY priority DESC 

Ici l'expression status = 2 sera évaluée soit 1 (status = 2 est vrai) ou 0 (status = 2 est faux).

+0

Nice, on dirait que vous avez beaucoup d'expérience ... – Jonathan

0

si status = 2 est pas toujours la plus haute priorité, vous avez encore peut obtenir les premières lignes avec le statut = 2 et tous les autres:

SELECT photo FROM table ORDER By status=2 desc 
1

Je vous suggère d'ajouter une autre colonne pour stocker ce fait. Si vous ne le faites pas, tôt ou tard (probablement plus tôt), une autre valeur d'état apparaîtra et une confusion se produira, en particulier si la colonne d'état peut avoir plusieurs significations (3 = photo validée et principale, par exemple).

+0

Peut-être que dans la prochaine mise à jour de code je ferai quelques optimisations de DB ... – Jonathan

Questions connexes