Requête sql basique mais au final pas si simple
Résolu
SM05
Messages postés
10
Statut
Membre
-
SM05 -
SM05 -
A voir également:
- Requête sql basique mais au final pas si simple
- 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
- Simple comic - Télécharger - Vie quotidienne
11 réponses
<section id="corps">
<!-- Le corps -->
<?php
$query = "
SELECT b.version, c.version, a.logiciel
from logiciel a
join version b on b.id = a.V_mini
join version c on c.id = a.V_maxi
";
try {
$pdo_select = $pdo->prepare($query); // Prépare une requête à l'exécution
$pdo_select->execute(); // Exécute une requête préparée
$NbreData = $pdo_select->rowCount(); // nombre d'enregistrements (lignes)
$rowAll = $pdo_select->fetchAll(); // fetchAll : Retourne un tableau contenant toutes les lignes du jeu d'enregistrements
}
catch (PDOException $e){
echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
// affichage
if ($NbreData != 0)
{
?>
<table>
<thead>
<tr>
<th>Version_mini</th>
<th>Version_maxi</th>
<th>Logiciel</th>
</tr>
</thead>
<tbody>
<?php
// pour chaque ligne (chaque enregistrement)
foreach ( $rowAll as $row )
{
// DONNEES A AFFICHER dans chaque cellule de la ligne
?>
<tr>
<td><?php echo $row['version b']; ?></td>
<td><?php echo $row['version c']; ?></td>
<td><?php echo $row['Logiciel']; ?></td>
</tr>
<?php
} // fin foreach
?>
</tbody>
</table>
<?php
}
else {
?>
pas de données à afficher
<?php
}
?>
</section >
<?php
// Au debut de ton fichier .... ( AVANT LE <html> )
// après la connexion à ta bdd...
$query = " SELECT B.version as Version_mini
, C.version as Version_maxi
, A.logiciel
FROM logiciel A
LEFT JOIN version B on B.id = A.V_mini
LEFT JOIN version C on C.id = A.V_maxi ";
try {
$pdo_select = $pdo->prepare($query); // Prépare une requête à l'exécution
$pdo_select->execute(); // Exécute une requête préparée
//$NbreData = $pdo_select->rowCount(); // nombre d'enregistrements (lignes) // JAMAIS SUR UNE REQUETE DE TYPE SELECT !!
$rowAll = $pdo_select->fetchAll(); // fetchAll : Retourne un tableau contenant toutes les lignes du jeu d'enregistrements
$NbreData = count($rowAll);
} catch (PDOException $e){
echo 'Erreur SQL : '. $e->getMessage().'<br/>';
die();
}
?>
puis, dans ta zone section
<section id="corps">
<!-- Le corps -->
<?php
// affichage
if (!empty($rowAll )){
?>
<table>
<thead>
<tr>
<th>Version_mini</th>
<th>Version_maxi</th>
<th>Logiciel</th>
</tr>
</thead>
<tbody>
<?php
// pour chaque ligne (chaque enregistrement)
foreach ( $rowAll as $row ) {
// DONNEES A AFFICHER dans chaque cellule de la ligne
?>
<tr>
<td><?php echo $row['Version_mini']; ?></td>
<td><?php echo $row['Version_maxi']; ?></td>
<td><?php echo $row['Logiciel']; ?></td>
</tr>
<?php
} // fin foreach
?>
</tbody>
</table>
<?php
} else {
echo "pas de données à afficher";
}
?>
</section >
Bonjour,
Pour faire simple, on pourrait ne pas utiliser la table version, qui ne sert à rien, et juste rajouter des points entre chiffres de v_mini et v_maxi de la table logiciel ;-)
ou pour faire compliqué quelque chose comme :
Pour faire simple, on pourrait ne pas utiliser la table version, qui ne sert à rien, et juste rajouter des points entre chiffres de v_mini et v_maxi de la table logiciel ;-)
ou pour faire compliqué quelque chose comme :
select b.version, c.version, a.logiciel from logiciel a join version b on b.id = a.V_mini join version c on c.id = a.V_maxi
Bonjour et merci pour ta réponse.
Plus exactement je veux faire une table version car je veux pouvoir faire des tri dessus ( pas possible avec des versions de la forme 1.2.4 ou 1.20.12 , si j'utilise 010204 pour 1.2.4 et 012012 pour 1.20.12 c'est tout de suite plus facile .... )
Si je comprends bien, avec ta solution " pour faire compliqué " tu utilise 2 tables de version ( chose que j'avais envisagé mais que je souhaite faire que en dernier denier recours ) .
Merci
Plus exactement je veux faire une table version car je veux pouvoir faire des tri dessus ( pas possible avec des versions de la forme 1.2.4 ou 1.20.12 , si j'utilise 010204 pour 1.2.4 et 012012 pour 1.20.12 c'est tout de suite plus facile .... )
Si je comprends bien, avec ta solution " pour faire compliqué " tu utilise 2 tables de version ( chose que j'avais envisagé mais que je souhaite faire que en dernier denier recours ) .
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir,
Avec une Image... on ne peut rien faire ( pas de copier/coller pour t'aider à corriger ton code)
Donc...
Merci de poster ton code correctement en utilisant les BALISES DE CODE.
Explications ( à lire ENTIEREMENT ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Avec une Image... on ne peut rien faire ( pas de copier/coller pour t'aider à corriger ton code)
Donc...
Merci de poster ton code correctement en utilisant les BALISES DE CODE.
Explications ( à lire ENTIEREMENT ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
OK super
J'ai juste rajouté un " as Logiciel " dans le select
Et voici le résultat :

J'ai fait un INNER JOIN pour ne pas afficher les cases vides et voici le résultat :
Bravo et merci pour votre aide !
ps : Savez vous où je peux trouver un "petit cours" sur ce type de Select ?
J'ai juste rajouté un " as Logiciel " dans le select
$query = " SELECT B.version as Version_mini
, C.version as Version_maxi
, A.logiciel as Logiciel
FROM logiciel A
LEFT JOIN version B on B.id = A.V_mini
LEFT JOIN version C on C.id = A.V_maxi ";
Et voici le résultat :
J'ai fait un INNER JOIN pour ne pas afficher les cases vides et voici le résultat :
Bravo et merci pour votre aide !
ps : Savez vous où je peux trouver un "petit cours" sur ce type de Select ?
Pour aller un petit peu plus loin je voudrais faire un CONCAT, mais je tourne en rond et je ne trouve pas la solution.Par exemple :
$query = " SELECT CONCAT( B.version as Version_mini
, C.version as Version_maxi ) as ma_concatenation
, A.logiciel as Logiciel
FROM logiciel A
LEFT JOIN version B on B.id = A.V_mini
LEFT JOIN version C on C.id = A.V_maxi ";