[SQL] Requette un peu spécial

Darfox
Invité n'ayant pas de compte PHPfrance

07 juil. 2005, 13:48

Lu

C'est la première fois que je post ici et j'espère que ça ne sera pas la dernière ;) (pour poser mes chtites questions et répondre à d'autres).

Bon alors, je débal :
J'ai une requette sql

Code : Tout sélectionner

$select = 'SELECT * FROM sujets WHERE id_cat=1 and rep=0 ORDER BY date DESC limit '.$limite.','.$nombre;
Donc la ça me ressort toutes les entrées contenu dans la table sujet où id_cat=1 et rep=0 classé par date. Seulement il classe par date, juste ce qu'il ressort. Moi ce que j'aimerais, c'est qu'il classe par date mais toutes les entrées de la table et qu'il ne me ressorte que celle où il y a id_cat=1 et rep=0.

Oila, j'espère que vous m'avez compris.
Sur ceux, si vous avez une réponse..., je vous remerci.

Eléphant du PHP | 479 Messages

07 juil. 2005, 14:08

Euh ... je pense que tu te méprends, parce que ce que tu cherches à faire, c'est ce que MySQL est sensé te ressortir.

Si tu peux nous donner un exemple de ce que tu attends (avec les champs incriminés) et les résultats sortis, ça pourrait aider.

Eléphanteau du PHP | 21 Messages

07 juil. 2005, 14:18

ok alors en fait mettons que dans la table sujets il y ait les champs suivants :
- id (ici il n'est pas important)
- titre
- texte
- id_cat
- rep
- date (en TIMESTAMP)

Ensuite le contenue (dans l'odre des tables sitées plus haut) :

1- 1, bonjour chez vous, blabla du texte, 1, 0, la_date
2- 2, comment va?, blabla encore du texte, 1, 0, la_date
3- 3, très bien, blabla toujours du texte, 1, 1, la_date

Quand je vais faire la requette :
$select = 'SELECT * FROM forum_sujet WHERE id_cat=1 and rep=0 ORDER BY date DESC limit '.$limite.','.$nombre;

MySql devrait me ressortir les champs 1 et 2 classé par date sans tenir compte du champ 3. Hors ce que je voudrais c'est que justement il en tienne compte sans toute fois le sélectionner.

Mammouth du PHP | 1029 Messages

07 juil. 2005, 14:30

Il ne peut en tenir compte puisque tu lui dis explicitement de ne pas en tenir compte
WHERE id_cat=1 and rep=0 .
ou alors
$result = mysql_query("SELECT * FROM forum_sujet WHERE id_cat=1 ORDER BY date DESC limit '.$limite.','.$nombre; ");

$row = pg_fetch_row($result);

echo $row[0];
echo $_row[1];
et là le troisième sera tenu en compte et pas afficher!

Eléphanteau du PHP | 21 Messages

07 juil. 2005, 14:43

lol, le problème c'est que j'ai donné une explication et donc les exemples ne sont pas véritable et donc la table contient énormément plus de donné que 3.
J'avais pensé aussi à faire ma requette sans sans le rep=0 de faire le while et dans le while mettre if(rep=0) mais le preoblème c'est qu'il ne m'affiche pas les réponse dans le bon ordre (ce qui n'est pas très logique).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juil. 2005, 14:44

Je vais te poser une question qui devrais résoudre ton problème :

Quel va être la différence dans les lignes retournées ? réponse : Aucune

Que tu trie par date et que tu supprimes les lignes inutiles ou bien que tu supprimes les lignes inutiles et que tu trie celles sui restent va donner le même résultat

Pour chipoter, je dirais même que la requête que tu as déjà faite est plus optimisée que celle que tu veux faire car tu réduit le nombre de champs à trier
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 21 Messages

07 juil. 2005, 15:00

Que tu trie par date et que tu supprimes les lignes inutiles ou bien que tu supprimes les lignes inutiles et que tu trie celles sui restent va donner le même résultat
C'est ce que je me suis dis, c'est pour ça que je l'ai fait. Mais quand j'ai regardé le résultat, ça m'affiché cellement les entrées avec rep=0 mais dans l'ordre de date de celle-ci. Hors quand j'enlève la condition, j'ai toutes les entrée classée par date (dans le bon ordre) c'est pour ça que j'ai dis que logiquement ça devrait marché.
Je vais retesté.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juil. 2005, 15:45

Tu es d'accord avec moi que les dates des enregistrements ne changent pas quand tu sélectionnes seulement ceux qui correspondent à la clause WHERE

Donc l'ordre des dates sera le même avec ou sans la clause WHERE

Donc, même si tu enlève les enregistrements qui ont rep=0, l'ordre des dates sera le même
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 21 Messages

07 juil. 2005, 16:33

C'est bon j'ai trouvé une autre solution plus simple parce que la je crois que je m'exprime mal et que vous ne comprenez pas.

Merci quand meme :wink:

PS : Je considère le topic résolu.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juil. 2005, 16:40

Donnes quand même la réponse, ça peut servir à quelqu'un d'autre

Mais sinon donnes nous un exemple concret qu'on voit ce que tu veut dire :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 21 Messages

07 juil. 2005, 17:00

Ba ce que je fais c'est détourner le problème :d

Donc ce que j'ai fait c'est que dans ma table j'ai créé un nouveau champ appelé last_post et que j'ajout un élément je met la date de l'ajout dans le champ last_post où l'entré à rep=0 et qui a le meme id_cat. Comme ça j'ai juste à remettre rep=0, dans la requette et de modifer ORDER BY date par ORDER BY last_post.

Voili voilo

Eléphant du PHP | 91 Messages

07 juil. 2005, 17:04

J'ai toujours pas compris .... mais si ça marche ne touche plus à rien.

;-)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juil. 2005, 17:04

pour toi, quelle est la différence entre last_post et date ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
pjl
ViPHP | 2119 Messages

07 juil. 2005, 17:06

J'ai toujours pas compris ....
tu n'es pas le seul.

Eléphanteau du PHP | 21 Messages

07 juil. 2005, 17:50

Lol
Pour le prochain problème je promet d'être plus claire ](*,) :D

Bon alors en fait dans ma table j'ai des entrées (normal :mrgreen: ) mais le truc c'est qu'il y a des entrées qui ont plus d'importance que d'autre c'est pour ça qu'elles sont marquées grace au champ rep (il s'agit de ceux où rep=0), les autres sont des suppléments à celle importante et on rep=1.
Donc quand je fesais un classement par date en restreignant (je crois pas que ça ce dit :roll: ) à rep=0 et bien j'avais le classement des entrées importantes dans l'ordre où je les avait rentré hors moi ce que je voulais, c'est que dès que j'ajouté une entrée en relation avec une entrée importante et bien celle-ci soit prise en compte dans le classement mais pas dans l'affichage.
En gros si l'entrée important était la première de la base elle se trouverait tout en bas dans le classement, mais si j'ajoutais une entrée en relation avec elle, et bien c'est comme si j'avais modifier la date de l'entrée principal à aujourd'hui, donc elle passe en premier dans le classement (toute fois sans être affiché dans le classement).

Bon la je ne sais vraiment plus quoi dire, si vous avez pas compris, alors oublié tout le sujet sinon vous n'arriverez pas à dormir :lol: