Bonjour,
J'ai un problème pour faire une requête SQL avec LEFT JOIN.
Je sais faire la requête SQL de jonction entre deux tables. Mais j'ai un problème lorsque la deuxième table possède plusieurs lignes qui peuvent être liées au numéro de jointure de la table a.
exemple avec base de donnée
base de donnée
exemple .php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 CREATE DATABASE `exmple` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `exmple`; -- -------------------------------------------------------- -- -- Structure de la table `cheveux` -- CREATE TABLE `cheveux` ( `n_inscr` int(11) NOT NULL, `n_chev` int(11) NOT NULL auto_increment, `cheveux` varchar(250) NOT NULL, PRIMARY KEY (`n_chev`), KEY `n_inscr` (`n_inscr`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Contenu de la table `cheveux` -- INSERT INTO `cheveux` (`n_inscr`, `n_chev`, `cheveux`) VALUES (1, 1, 'Blond'), (3, 2, 'Chatain'); -- -------------------------------------------------------- -- -- Structure de la table `couleur` -- CREATE TABLE `couleur` ( `n_inscr` int(11) NOT NULL, `n_yeux` int(11) NOT NULL auto_increment, `couleur` varchar(250) NOT NULL, PRIMARY KEY (`n_yeux`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- -- Contenu de la table `couleur` -- INSERT INTO `couleur` (`n_inscr`, `n_yeux`, `couleur`) VALUES (2, 1, 'bleu'), (4, 2, 'vert'), (4, 3, 'rouge'), (4, 4, 'marron'); -- -------------------------------------------------------- -- -- Structure de la table `inscrit` -- CREATE TABLE `inscrit` ( `n_inscr` int(11) NOT NULL auto_increment, `surnom` varchar(250) NOT NULL, PRIMARY KEY (`n_inscr`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- -- Contenu de la table `inscrit` -- INSERT INTO `inscrit` (`n_inscr`, `surnom`) VALUES (1, 'lili_256'), (2, 'lola_16'), (3, 'pat_11'), (4, 'dam_16');
Affichage du résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 <?php session_start(); mysql_connect("localhost","root",""); mysql_select_db('exmple'); $sqe=mysql_query("SELECT a.n_inscr,a.surnom,b.cheveux,c.couleur FROM inscrit a LEFT OUTER JOIN cheveux b ON a.n_inscr=b.n_inscr LEFT OUTER JOIN couleur c ON a.n_inscr=c.n_inscr"); $nc=mysql_num_rows($sqe);$i=0; while($rb=mysql_fetch_object($sqe)){ $var[$i][0]=$rb->n_inscr; $var[$i][1]=$rb->surnom; $var[$i][2]=$rb->cheveux; $var[$i][3]=$rb->couleur; $i++; } for($i=0;$i<$nc;$i++){ if($var[$i][2]==""){unset($var[$i][2]);}/*ici j'efface le vide dans le tableau*/ if($var[$i][3]==""){unset($var[$i][3]);}/*ici j'efface le vide dans le tableau*/ } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans titre</title> </head> <body> <?php $vir=array_merge($var); echo"<textarea cols=235 rows=62>"; print_r($vir); echo"</textarea>"; ?> </body> </html>
Mon problème se situe ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 Array ( [0] => Array ( [0] => 1 [1] => lili_256 [2] => Blond ) [1] => Array ( [0] => 2 [1] => lola_16 [3] => bleu ) [2] => Array ( [0] => 3 [1] => pat_11 [2] => Chatain ) [3] => Array ( [0] => 4 [1] => dam_16 [3] => vert ) [4] => Array ( [0] => 4 [1] => dam_16 [3] => rouge ) [5] => Array ( [0] => 4 [1] => dam_16 [3] => marron ) )
je souhaiterai faire une requête sql de jointure me donnant se résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 [3] => Array ( [0] => 4 [1] => dam_16 [3] => vert ) [4] => Array ( [0] => 4 [1] => dam_16 [3] => rouge ) [5] => Array ( [0] => 4 [1] => dam_16 [3] => marron )
Donc mon problème est que je sais joindre deux tables si elles n'ont qu'une lignes chacune en égaliter (n_inscr).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Array ( [0] => Array ( [0] => 1 [1] => lili_256 [2] => Blond ) [1] => Array ( [0] => 2 [1] => lola_16 [3] => bleu ) [2] => Array ( [0] => 3 [1] => pat_11 [2] => Chatain ) [3] => Array ( [0] => 4 [1] => dam_16 [3] => array ( [0]=> vert [1]=> rouge [2]=> marron ) ) )
Mais je ne trouve pas de solution pour une jointure d'une table A à une autre table B ayant plusieurs lignes pour le même numéro de jointure (n_inscr).
1 ère question : est ce possible ?
2 ème question : si oui quel méthode faut-il utiliser pour avoir le résultat ci-dessus?
Partager