mysql passage de la version 4.x à la 5.0

Répondre
LupusMic
le 07/08/2006 à 08:58
LupusMic
(Juts) L'habitude du up est une habitude détestable.

Va avec une console MySQL sur ta base, et dis-nous ce que dit describes programme.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
JuTs
le 08/08/2006 à 23:32
JuTs
voilà

+-----------------+----------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------------------+------+-----+---------------------+-------+
| id_programme | smallint(5) unsigned | NO | PRI | 0 | |
| id_saisons | smallint(2) unsigned | NO | PRI | 0 | |
| id_equipes | tinyint(1) unsigned | NO | PRI | 0 | |
| id_types_groupe | tinyint(1) unsigned | NO | PRI | 0 | |
| id_groupes | smallint(4) unsigned | NO | PRI | 0 | |
| id_clubs | int(10) unsigned | NO | PRI | 0 | |
| date | datetime | NO | | 0000-00-00 00:00:00 | |
| lieu | varchar(30) | NO | | | |
| home | tinyint(1) unsigned | NO | | 0 | |
| buts | tinyint(2) | NO | | -1 | |
+-----------------+----------------------+------+-----+---------------------+-------+
JuTs
LupusMic
le 09/08/2006 à 08:54
LupusMic
Je me demande si tu ne dois pas préciser la clé primaire dans son intégralité.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 10/08/2006 à 16:31
LupusMic
Les colonnes id_* font toutes partie de la clé primaire. Lorsque tu joins deux tables, tu fais en sorte que la clé primaire concorde avec les clés étrangères de la table de gauche. Donc il se peut que tu doives indiquer l'ensemble des valeurs de la clé primaire pour effectuer la jointure.

Ce n'est qu'une supposition.

Mais il est possible que ce soit un bogue de MySQL.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
JuTs
le 10/08/2006 à 22:08
JuTs
Ce n'est pas possible, dans la table clubs je n'ai que id_clubs comme clé.

et comme je l'indique un peu plus haut, cette requête-ci (requête de test) fonctionne correctement

SELECT * FROM programme AS p2, programme AS p1
LEFT OUTER JOIN clubs AS clubHome ON clubHome.id_clubs = p1.id_clubs


dans mon FROM, seul le dernier alias est pris en compte, si je mets p2.id_clubs à la place de p1.id_clubs ça ne fonctionne plus.
JuTs
LupusMic
le 11/08/2006 à 00:52
LupusMic
Je crois avoir compris ce qu'il t'arrive : la table n'est pas dans le scope de la jointure.

MySQL essaye d'abord de faire la jointure
programme AS p1
LEFT OUTER JOIN clubs AS clubHome ON clubHome.id_clubs = p2.id_clubs


Puis joindra la table obtenue à « programme AS p2 ».

Or, dans la jointure left outer join, p1 n'est pas connu. En fait, La Globule avait mal exprimé le fait que le champs is_clubs n'est pas visible dans la clause on join.

De plus, en y réfléchissant :

programme AS p2
LEFT OUTER JOIN clubs AS clubHome ON clubHome.id_clubs = p1.id_clubs


Pourquoi faire une jointure en utilisant une donnée extérieure aux tables à joindre ? Ce n'est pas logique en fait.

Revoie la logique de ta requête, tu devrais t'en sortir. Et surtout, vas-y pas étapes.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
JuTs
le 12/08/2006 à 11:57
JuTs
C'est bon je crois, je suis parvenu à quelque chose qui fonctionne


SELECT CONCAT( debut, ' - ', fin, ', ', SUBSTRING( p1.date, 9, 2 ) , '/', SUBSTRING( p1.date, 6, 2 ) , '/', SUBSTRING( p1.date, 1, 4 ) , ' ', SUBSTRING( p1.date, 12, 2 ) , ':', SUBSTRING( p1.date, 15, 2 ) , ', ', clubHome.club, ' - ', clubAway.club ) , p1.id_programme
FROM programme AS p1
LEFT OUTER JOIN programme AS p2 ON p2.id_programme = p1.id_programme
LEFT OUTER JOIN clubs AS clubHome ON clubHome.id_clubs = p1.id_clubs
LEFT OUTER JOIN clubs AS clubAway ON clubAway.id_clubs = p2.id_clubs
LEFT OUTER JOIN saisons AS s ON s.id_saisons = p1.id_saisons
WHERE p1.home =1
AND p2.home =0
AND p1.buts = -1
AND p2.buts = -1
ORDER BY p1.date



Mais je ne comprends pas vraiment ce qui a pu changer de mysql 4 à mysql 5 pour que mon ancienne requête ne fonctionne plus.
D'ailleurs la requête suivante fonctionne parfaitement :

SELECT p1.id_programme AS id_prog1, p2.id_programme AS id_prog2, p1.id_clubs AS id_clubs1, p2.id_clubs AS id_clubs2
FROM programme AS p1, programme AS p2
WHERE p1.id_programme = p2.id_programme

tant p1 que p2 sont accessible dans le where, dans le select, ... alors pour quoi pas dans le ON de la jointure ?




Pourquoi faire une jointure en utilisant une donnée extérieure aux tables à joindre ?


Comment ça une donnée extérieur ? Je joins la table clubs (en lui donnant l'alias clubHome) à la table programme (alias p1) en utilisant un champ id_clubs qui se trouve dans les deux table.
JuTs
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours