Commande INNER JOIN

Petit nouveau ! | 4 Messages

13 mars 2019, 16:35

Bonjour, j'ai une table villes et une autre pays. La jointure ne ce fait pas. Besoin d'aide. Merci d'avance.

villes.php

<?php

$mysqli = new mysqli('localhost', 'root', '', 'exercice_projet_villes');
$mysqli->set_charset("utf8");

?>

<?php

$result = $mysqli->query('SELECT ville_id, ville_nom FROM villes');

while ($row = $result->fetch_array()) {

$villes[$row['ville_id']] = $row['ville_nom'];

}

$result = $mysqli->query('SELECT pays.pays_id, pays_nom FROM pays INNER JOIN villes
WHERE pays.pays_id = villes.pays_id GROUP BY pays_nom ORDER BY pays_nom');

while ($row = $result->fetch_array()) {

$pays_liste[$row['pays_id']] = $row['pays_nom'];


echo '<pre>';
print_r($pays_liste);
echo '</pre>';

}

?>

<ul>

<?php

if (!empty($villes)) {

foreach ($villes as $id => $ville) : ?>

<li><a href="ville.php?id=<?php echo $id; ?>"><?php echo $ville; ?></a></li>

<?php endforeach ?>

<?php } ?>

</ul>

<ul>
<?php

if (!empty($pays_liste)) {

foreach ($pays_liste as $id => $pays) : ?>

<li><a href="pays.php?id=<?php echo $id; ?>"><?php echo $pays; ?></a></li>

<?php endforeach ?>

<?php } ?>

</ul>

<?php

$result->free();
$mysqli->close();

?>

pays.php

<?php require('includes/inc-connexion.php'); ?>

<?php

$pays_id = $_GET['id'];

$result = $mysqli->query('SELECT pays_nom, ville_nom, ville_id FROM pays INNER JOIN villes
WHERE villes.pays_id = pays.pays_id AND pays.pays_id = ' . $pays_id);

while ($row = $result->fetch_array()) {

$pays_nom = $row['pays_nom'];

$villes[$row['ville_id']] = $row['ville_nom'];
}

?>

<?php

$result->free();
$mysqli->close();

?>

Mammouth du PHP | 1450 Messages

13 mars 2019, 19:12

ta condition de jointure doit être dans ta jointure aprés la clause ON plutot que dans le WHERE

test tes requète dans phpmyadmin pour être sur de leur fonctionnement.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 4 Messages

15 mars 2019, 13:25

J'ai testé avec ON = FATAL ERROR syntax error, unexpected 'is' (T_STRING) on line number 1

$result = $mysqli->query('SELECT pays.pays_id, pays_nom FROM pays INNER JOIN villes
WHERE pays.pays_id = villes.pays_id GROUP BY pays_nom ORDER BY pays_nom');

while ($row = $result->fetch_array()) {

$pays_liste[$row['pays_id']] = $row['pays_nom'];

}
echo '<pre>';
print_r($pays_liste);
echo '</pre>';

Mammouth du PHP | 1450 Messages

15 mars 2019, 14:23

ta clause ON ne doit pas contenir de IS, mais une égalité entre une table déjà incluse et ta nouvelle table

test tes requète dans phpmyadmin pour être sur de leur fonctionnement.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 4 Messages

15 mars 2019, 16:24

is ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7984 Messages

16 mars 2019, 00:56

FATAL ERROR syntax error, unexpected 'is'
Selon le message d'erreur que tu nous as indiqué, tu as un "is" quelque part dans ta requête qui provoque cette erreur.


Du coup il faut que tu suives le conseil de Spols :
teste tes requètes dans phpmyadmin pour être sûr de leur fonctionnement.
Quand tout le reste a échoué, lisez le mode d'emploi...