Requête select sur 2 tables innodb
Résolu
bruno3591
Messages postés
159
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je suis débutant, et je cherche à faire une requête SELECT sur 2 tables. Je voudrais récupérer les "signalement" de la table anomalie qui correspondent à son "idchariot dans la table chariot. En clair, si je clique sur un chariot, cela affiche les signalements de celui-ci. Je m'explique :
j'ai une base Mysql qui comprend 2 tables (InnoDB).
Voici les 2 tables :
CREATE TABLE `chariot` (
`idchariot` int( 11 ) NOT NULL AUTO_INCREMENT ,
`type` varchar( 255 ) NOT NULL ,
`energie` varchar( 255 ) NOT NULL ,
`marque` varchar( 255 ) NOT NULL ,
`modele` varchar( 255 ) NOT NULL ,
`n_serie` varchar( 30 ) NOT NULL ,
`annee` int( 11 ) NOT NULL ,
`n_parc` varchar( 255 ) NOT NULL ,
PRIMARY KEY ( `idchariot` )
) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT =
CREATE TABLE `anomalie` (
`idano` int(11) NOT NULL auto_increment,
`idchariot` int(10) NOT NULL,
`signalement` varchar(255) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`idano`),
KEY `idchariot` (`idchariot`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=
J'ai ajouté un champ "idchariot" sur chacune des tables. "idchariot" sur la table anomalie est indexé. Je n'ai pas de clé étrangère car je ne sais pas m'en servir.
Voici l'état de ma requête, elle fonctionne mais affiche toujours le même enregistrement (signalement) :
"SELECT anomalie.signalement FROM anomalie INNER JOIN chariot ON anomalie.idchariot = chariot.idchariot";
Voici la requête d'insertion de la table anomalie :
$date = $_POST['date'];
$signalement = $_POST['signalement'];
$idchariot = $_POST['idchariot'];
$req = mysql_query("INSERT INTO anomalie (idchariot, signalement, date) VALUES ('$idchariot', '$signalement', '$date')");
J'ai compris le principe des jointures avec les différentes syntaxes, j'ai tenté beaucoup de combinaisons de jointures mais après une semaines d'essais je sèche lamentablement.
Merci de votre aide.
Je suis débutant, et je cherche à faire une requête SELECT sur 2 tables. Je voudrais récupérer les "signalement" de la table anomalie qui correspondent à son "idchariot dans la table chariot. En clair, si je clique sur un chariot, cela affiche les signalements de celui-ci. Je m'explique :
j'ai une base Mysql qui comprend 2 tables (InnoDB).
Voici les 2 tables :
CREATE TABLE `chariot` (
`idchariot` int( 11 ) NOT NULL AUTO_INCREMENT ,
`type` varchar( 255 ) NOT NULL ,
`energie` varchar( 255 ) NOT NULL ,
`marque` varchar( 255 ) NOT NULL ,
`modele` varchar( 255 ) NOT NULL ,
`n_serie` varchar( 30 ) NOT NULL ,
`annee` int( 11 ) NOT NULL ,
`n_parc` varchar( 255 ) NOT NULL ,
PRIMARY KEY ( `idchariot` )
) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT =
CREATE TABLE `anomalie` (
`idano` int(11) NOT NULL auto_increment,
`idchariot` int(10) NOT NULL,
`signalement` varchar(255) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`idano`),
KEY `idchariot` (`idchariot`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=
J'ai ajouté un champ "idchariot" sur chacune des tables. "idchariot" sur la table anomalie est indexé. Je n'ai pas de clé étrangère car je ne sais pas m'en servir.
Voici l'état de ma requête, elle fonctionne mais affiche toujours le même enregistrement (signalement) :
"SELECT anomalie.signalement FROM anomalie INNER JOIN chariot ON anomalie.idchariot = chariot.idchariot";
Voici la requête d'insertion de la table anomalie :
$date = $_POST['date'];
$signalement = $_POST['signalement'];
$idchariot = $_POST['idchariot'];
$req = mysql_query("INSERT INTO anomalie (idchariot, signalement, date) VALUES ('$idchariot', '$signalement', '$date')");
J'ai compris le principe des jointures avec les différentes syntaxes, j'ai tenté beaucoup de combinaisons de jointures mais après une semaines d'essais je sèche lamentablement.
Merci de votre aide.
A voir également:
- Requête select sur 2 tables innodb
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tables des matières word - Guide
- Faire 2 colonnes sur word - Guide
- 2 ecran pc - Guide
- Avoir 2 comptes whatsapp sur le même téléphone - Guide
6 réponses
ta base de donnée est mal construite
en fait il faut utiliser un alter table pour créer un lien entre deux tables.
de plus tu utilise des mots SQL interdit pour tes noms de champs par exemple "date"
réessaye avec ça
Pour ta requête il faut faire
Dis moi si ça marche comme ça
P.S. : n'utilise pas le NOT NULL partout sinon après tu es obligé de remplir tous les champs
en fait il faut utiliser un alter table pour créer un lien entre deux tables.
de plus tu utilise des mots SQL interdit pour tes noms de champs par exemple "date"
réessaye avec ça
CREATE TABLE CHARIOT( id_CHARIOT INT NOT NULL AUTO_INCREMENT, leType_CHARIOT VARCHAR(255), energie_CHARIOT VARCHAR(255) , marque_CHARIOT VARCHAR(255), modele_CHARIOT VARCHAR(255), numSerie_CHARIOT VARCHAR(30), annee_CHARIOT INT, numParc_CHARIOT VARCHAR(255), CONSTRAINT PK_Chariot PRIMARY KEY(id_CHARIOT) ); CREATE TABLE ANOMALIE( id_ANOMALIE INT(11) NOT NULL AUTO_INCREMENT, idChariot_ANOMALIE INT NOT NULL, signalement_ANOMALIE VARCHAR(255), date_ANOMALIE DATE, CONSTRAINT PK_ANOMALIE PRIMARY KEY(id_ANOMALIE) ); ALTER TABLE ANOMALIE ADD CONSTRAINT FK_ANOMALIE_CHARIOT FOREIGN KEY(idChariot_ANOMALIE) REFERENCES CHARIOT(id_CHARIOT) ;
Pour ta requête il faut faire
SELECT A.signalement_ANOMALIE FROM ANOMALIE A,CHARIOT C WHERE C.id_CHARIOT=A.idChariot_ANOMALIE AND C.numSerie_CHARIOT = leNumDeSerieDuChariot
Dis moi si ça marche comme ça
P.S. : n'utilise pas le NOT NULL partout sinon après tu es obligé de remplir tous les champs
Merci, ça fonctionne si je récupère le numserie.
SELECT A.signalement_ANOMALIE
FROM ANOMALIE A,CHARIOT C
WHERE C.id_CHARIOT=A.idChariot_ANOMALIE
AND C.numSerie_CHARIOT = leNumDeSerieDuChariot
Entre temps j'y suis aussi arrivé avec cette requête, la tienne semble plus normalisée :
'SELECT anomalie.signalement FROM anomalie INNER JOIN chariot ON anomalie.idchariot = '.$idchariot.'';
A priori le fait de se servir de clé étrangères faciliterai l'intégrité de la base.
SELECT A.signalement_ANOMALIE
FROM ANOMALIE A,CHARIOT C
WHERE C.id_CHARIOT=A.idChariot_ANOMALIE
AND C.numSerie_CHARIOT = leNumDeSerieDuChariot
Entre temps j'y suis aussi arrivé avec cette requête, la tienne semble plus normalisée :
'SELECT anomalie.signalement FROM anomalie INNER JOIN chariot ON anomalie.idchariot = '.$idchariot.'';
A priori le fait de se servir de clé étrangères faciliterai l'intégrité de la base.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ce code m'affiche les enregistrements en boucle mais ne s'arrête après le dernier trouver correspondant à son idchariot. du coup même s'il n'y a qu'un seul enregistrement et que je met LIMIT 2, il m'affiche le même enregistrement 2 fois.
<?php
$requete3 = 'SELECT anomalie.signalement, anomalie.idano, anomalie.idchariot FROM anomalie INNER JOIN chariot ON anomalie.idchariot = '.$idchariot.' LIMIT 2';
$execution_requete3 = mysql_query($requete3);
$total3 = mysql_num_rows($execution_requete3);
if($total3) {
echo '<table border="0" cellspacing="0" cellpadding="8" bgcolor="#FFFFFF" >'."\n";
echo '<tr>';
echo '<td><b><u>Anomalies en cours</u></b></td>';
echo '</tr>'."\n";
while($row = mysql_fetch_array($execution_requete3)) {
echo '<tr>';
echo '<td>'.$row['signalement'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
}
else echo 'Pas d\'enregistrements dans la base...';
mysql_free_result($execution_requete3);
?>
<?php
$requete3 = 'SELECT anomalie.signalement, anomalie.idano, anomalie.idchariot FROM anomalie INNER JOIN chariot ON anomalie.idchariot = '.$idchariot.' LIMIT 2';
$execution_requete3 = mysql_query($requete3);
$total3 = mysql_num_rows($execution_requete3);
if($total3) {
echo '<table border="0" cellspacing="0" cellpadding="8" bgcolor="#FFFFFF" >'."\n";
echo '<tr>';
echo '<td><b><u>Anomalies en cours</u></b></td>';
echo '</tr>'."\n";
while($row = mysql_fetch_array($execution_requete3)) {
echo '<tr>';
echo '<td>'.$row['signalement'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
}
else echo 'Pas d\'enregistrements dans la base...';
mysql_free_result($execution_requete3);
?>