Résultat requete SQL a ne plus rien comprendre

Eléphant du PHP | 124 Messages

06 août 2007, 14:25

Salut,

Donc voilà j'execute dans ma base de données cette requete :
SELECT * FROM match WHERE (competition='24' AND 'datefin'>'2007-08-06 14:30:00') GROUP BY competition
Et le problème est qu'il me sort une ligne :

id - equipe1 - equipe2 - competition - datefin

1600 - Narbonne - Clermont - 24 - 2007-03-24 20:00:00

Alors que la date est complétement depassée...

Pourquoi ?

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:14, modifié 1 fois.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

06 août 2007, 14:27

'datefin' est une chaîne, pas le nom d'une colonne... enlève les apostrophes.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 août 2007, 14:28

si tu écrit 'datefin', ton SGBD va regarder si la chaine de caractère 'datefin' est supérieure à '2007-08-06 14:30:00'

Pour comparer par rapport à ton champ, enlève les quotes (') autour du nom du champ

EDIT ---
Damned, trop lent :(
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éphant du PHP | 124 Messages

06 août 2007, 14:36

Je viens de les enlever, le problème et que dès que je les enleve il n'y a plus aucun match alors qu'il devrait en avoir.

Encore un autre problème :

Quand il y a des matchs non joués dans la competition numéro 1, la requete fonctionne parfaitement.

Là tous les matchs en competition 1 sont finis, mais il reste de nombreux matchs dans d'autre competition qui ne sont plus visible depuis que les matchs en competition 1 sont finis.

Je trouve ça extrèmement bizarre...

Merci de votre aide
Modifié en dernier par neo765 le 29 mai 2008, 23:14, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 août 2007, 15:01

Et à quoi correspond la clause "competition = '24'" ?
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

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

06 août 2007, 15:02

S'il y a bien quelque chose qui n'existe pas en informatique, c'est le hasard. Si tu essaies de résoudre tes problèmes au hasard (rajouter des apostrophes là où il n'y a pas lieu) alors tu cours le risque de créer la fausse impression d'avoir résolu ton problème alors que ce n'est pas le cas.

En parlant de hasard, sans le schéma des tables et les autres trucs qui s'affichent en rouge quand on poste un sujet, on ne peut répondre qu'au hasard à ton message. Poste les informations manquantes plzkthx.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 août 2007, 15:03

La commande GROUP BY permet de grouper les résultats des colonnes auxquelles aucune fonction de groupe n'est appliquée (max, count, etc.). L'utiliser avec un SELECT * ou aucune des colonnes ne sera groupé n'a aucun sens.

Le group by doit contenir tous les champs non groupés du select :

Code : Tout sélectionner

SELECT champ1, champ2, ..., COUNT(champX), MAX(champY) FROM ma_table GROUP BY champ1, champ2
Quant au fait que seules les données d'une compétition apparaissent, peut être est-ce du à ce criètre ? : competition='24' :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 124 Messages

06 août 2007, 15:56

Le problème vient de la requete SQL précédente :

SELECT ident, discipline FROM sports WHERE discipline='$sport2_discipline_var'

J'avais rajouté un GROUP BY discipline

Il prennait donc que le 1er identifiant de competition de la discipline qui était le numéro 1.

Si aucun match n'était disponible dans cette competition, il sautait toute la discipline.


J'ai maintenant enlevé ce GROUP BY, mais il execute 3 fois le script car sont présent 3 competitions :

Image
Modifié en dernier par neo765 le 29 mai 2008, 23:14, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 août 2007, 16:07

Au cas où tu ne l'ai pas compris quand Hubert t'en as parlé, lorsque tu postes un nouveau sujet, tu as un rappel qui s'affiche :
Rappel pratique - n'oubliez pas de :
  • suivre ces quelques conseils de débogage
  • préciser quel SGBD vous utilisez ainsi que sa version
  • utiliser les balises

    Code : Tout sélectionner

    [/b] et [b]
    [/b] pour afficher vos requêtes SQL[/color]
  • poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (vous pouvez retirer les colonnes qui ne sont pas utilisées dans les requêtes problématiques)
  • si nécessaire, poster un échantillon des données
C'est pas pour faire joli. Donc, merci de suivre ces conseils, parce là, je ne comprend pas grand chose à ton soucis :?
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éphant du PHP | 124 Messages

06 août 2007, 16:15

Merci de votre aide.

J'ai rajouté un champ "sport" pour chaque match afin de faire un GROUP BY sport.

Merci