Page 1 sur 1

Résultat requete SQL a ne plus rien comprendre

Posté : 06 août 2007, 14:25
par neo765
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

Posté : 06 août 2007, 14:27
par Hubert Roksor
'datefin' est une chaîne, pas le nom d'une colonne... enlève les apostrophes.

Posté : 06 août 2007, 14:28
par zeus
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 :(

Posté : 06 août 2007, 14:36
par neo765
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

Posté : 06 août 2007, 15:01
par zeus
Et à quoi correspond la clause "competition = '24'" ?

Posté : 06 août 2007, 15:02
par Hubert Roksor
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.

Posté : 06 août 2007, 15:03
par Ryle
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' :)

Posté : 06 août 2007, 15:56
par neo765
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

Posté : 06 août 2007, 16:07
par zeus
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 :?

Posté : 06 août 2007, 16:15
par neo765
Merci de votre aide.

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

Merci