Page 1 sur 1
"OU" en sql ?
Posté : 09 août 2005, 10:21
par VaN
bonjour à tous,
j'aimerais savoir comment écrire un "ou" en sql car
WHERE id_categorie='5' AND id_categorie='6'
ne marche pas, et je voudrais sortir les lignes où id_categorie = 5 OU 6.
merci
Posté : 09 août 2005, 10:25
par ouckileou
sachant que ET s'écrit AND, OU s'écrit.... OR
mais oui

Posté : 09 août 2005, 10:29
par VaN
ah bin merci, c'etait tellement simple que je pensais que ça marchait pas, je pensais que le OR était réservé au php.
Posté : 09 août 2005, 10:33
par ouckileou
tu peux aussi utiliser il me semble '&&' et '||'
mais en fait c'est plutôt l'inverse :
on voit généralement AND et OR en SQL, et && et || en PHP (ou autre langage)
après, c'est au choix

Posté : 09 août 2005, 10:46
par VaN
petit probleme, mes sorties ne se rangent pas comme elles devraient. Je voudrais qu'elle se rangent par date DESC, qu'importe l'id_categorie. Or la, elles se rangent par date, mais d'abord toutes les entrées id_categorie=5, puis ensuite toutes les entrées id_categorie=6.
Comment mixer les sorties ?
<?php
$sql = "SELECT DISTINCT a.id_article, a.id_categorie, a.date_entree, a.time_entree, a.nom,a.first,
t.id_article , a.date AS date_a
FROM articles a, textes t
WHERE a.id_article=t.id_article
AND id_categorie='5'
OR id_categorie='6'
AND first='0'
ORDER BY date_a DESC";
?>
Posté : 09 août 2005, 10:51
par ouckileou
bizarre... et tu as bien les 5 puis les 6 avec les dates non triées correctement ??
Posté : 09 août 2005, 10:59
par VaN
J'ai tous les 5, trié par date DESC, puis tous les 6 , triés par date DESC.
ce que je voudrais, c'est mixer les 5 ET les 6, triés par date DESC.
Posté : 09 août 2005, 11:01
par VaN
ah nan attend, j'ai rien dit, le bug est plus grave que ça en fait.
Posté : 09 août 2005, 11:02
par ouckileou
ce que je voulais dire c'est que dans le résultat les dates ne sont pas correctement triées ?
ça pourrait être le fruit du hazard sinon, en triant par date ça met les 5 puis les 6 car les 5 ont tous des dates supérieures aux 6
sinon, pas sûr mais à ta place je mettrais des parenthèses pour être tranquille sur tes conditions :
Code : Tout sélectionner
SELECT DISTINCT a.id_article, a.id_categorie, a.date_entree, a.time_entree, a.nom,a.first,
t.id_article , a.date AS date_a
FROM articles a, textes t
WHERE a.id_article=t.id_article
AND (id_categorie='5'
OR id_categorie='6')
AND first='0'
ORDER BY date_a DESC";
Posté : 09 août 2005, 11:11
par VaN
sinon, pas sûr mais à ta place je mettrais des parenthèses pour être tranquille sur tes conditions
heureusement que j'ai rafraichit la page avant de poster l'explication de mon bug, mtnt ça marche nickel. En fait il me sortait 154 sorties au lieu de 15, en répétant parfois 4 ou 5 fois le meme article. Sur quoi ont joué les parentheses en fait ?
Posté : 09 août 2005, 11:18
par ouckileou
cela regroupe des conditions en fait
sans parenthèses :
tous les enregistrements qui ont id_categorie=5, ou qui ont id_categorie=6 et aussi first=0
ce qui fait que la condition sur first ne s'applique que sur les enregistrements avec id_categorie=6, donc tu récupères tous les autres à 5
(c'est comme ça que je le lis, à vérifier...)
en tout cas les conditions ne sont pas correctes
avec parenthèses :
tous les enregistrement qui sont soit 5 soit 6 et en même temps avec first=0
Posté : 09 août 2005, 11:30
par VaN
ok merci, tag résolu apposé.
Posté : 09 août 2005, 11:44
par ouckileou
après relecture et conseils de Cyrano, voici quelques infos qui ont été trouvées (pour la lecture de la requête
sans parenthèses :
ce post de Ripat
http://www.phpfrance.com/forums/voir_re ... .php#17257
et pour la liste des précédences d'opérateurs :
http://dev.mysql.com/doc/mysql/fr/opera ... dence.html
et dans le même manuel, un peu de lecture :
Comment MySQL optimise les clauses WHERE
amuse-toi bien
