Page 1 sur 1

requette ordonné par plusieur champ

Posté : 14 avr. 2005, 11:18
par Vianney
Salut les gens :)
voila j'arrive pas a fixer ce probleme de requette...
Jveux permettre a mes utilisateurs d'épingler une news qui sera toujour affiché en 1er tant qu'elle est épinglé
J'ai donc ajouté un champ "sticky" dans ma table news ce champ prendra les valeurs "yes" ou "no"
Je voulais donc ordonné mes news dans ma requette par sticky desc en 1er puis ensuite par date desc
j'ai donc fait la requette suivante :

Code : Tout sélectionner

$sql_news = 'SELECT datePost,title,content,name,firstname,login FROM newstable order by sticky desc and datePost desc LIMIT 0, 10';
-> erreur sql !

apres j'ai essayé ca

Code : Tout sélectionner

$sql_news = 'SELECT datePost,title,content,name,firstname,login FROM newstable order by (sticky and datePost) desc LIMIT 0, 10';
-> pas d'erreur sql mais ca affiche pas dans l'ordre que je veux... :/

Jai essayé de retourner dans tous les sens mais rien a faire elle est coriace :)
qq1 aurait une idée ?

Posté : 14 avr. 2005, 11:35
par piet
essaie ça :

[quote]$sql_news = 'SELECT datePost,title,content,name,firstname,login FROM newstable order by sticky desc, datePost desc LIMIT 0, 10';[/quote]

(une virgule à la place du AND)

Posté : 14 avr. 2005, 11:36
par Vianney
Yes man ! :)
Merci ca marche du feu de dieu :)

Posté : 14 avr. 2005, 11:37
par piet
y a pas de quoi...

Re: requette ordonné par plusieur champ

Posté : 14 avr. 2005, 11:39
par albat
Tu n'étais pas très loin : Juste une petite faute de syntaxe SQL ! ;)
$sql_news = 'SELECT datePost, title, content, name, firstname, login FROM newstable ORDER BY sticky DESC,  datePost DESC LIMIT 0, 10';

Cette écriture n'est pas valide :
$sql_news = 'SELECT datePost, title, content, name, firstname, login FROM newstable ORDER BY sticky DESC AND datePost DESC LIMIT 0, 10'; 
d'où une erreur SQL. Rien de plus logique !

$sql_news = 'SELECT datePost, title, content, name, firstname, login FROM newstable ORDER BY (sticky and datePost) DESC LIMIT 0, 10'; 
(sticky and datePost) te retourne un booléen (true ou false)
d'où pas d'erreur SQL mais pas l'ordre désiré non plus. ;)

Posté : 14 avr. 2005, 13:11
par Vianney
oki merci :)

juste une petite question sur ta derniere remarque albat, le booléen retournait true ou false sous quelle condition ?
si les valeurs sont affecté ? si elles sont égales ?

Posté : 14 avr. 2005, 14:48
par albat
Bonne question !

À priori, je dirais : "si elles sont définies toutes les deux".
Certainement pas "si elles sont égales" car AND n'est pas un opérateur de comparaison.

Ça peut se tester... ;)