Requête sql basique mais au final pas si simple

Résolu/Fermé
SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 - 4 juin 2020 à 20:50
 SM05 - 20 juin 2020 à 21:21
Bonjour,
Je souhaite faire une requête sql basique au premier abord mais finalement pas si simple. ( Voir capture d'écran )



Est ce que quelqu'un aurait une idée?
Merci.
A voir également:

11 réponses

SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 1
5 juin 2020 à 21:17

    <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 > 

1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
6 juin 2020 à 08:30
<?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 > 

1
jee pee Messages postés 39649 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
Modifié le 5 juin 2020 à 19:03
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 :

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



0
SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 1
5 juin 2020 à 18:32
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 juin 2020 à 18:42
Bonjour,

Il n'utilise pas deux tables version .... il n'utilise que La table version... mais qu'il "join" sur la colonne mini et sur la colonne maxi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 1
5 juin 2020 à 18:44
Oups,alors c'est moi qui ne comprend pas le :

select b.version, c.version, a.logiciel
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 5 juin 2020 à 18:50
en effet, tu ne comprends pas. qu'utilises-tu pour apprendre le langage SQL?
as-tu essayé la solution proposée?
0
SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 1
5 juin 2020 à 19:27
oui ça ne fonctionne pas ( mais c'est a priori l'affichage qui pose pb : je ne dois pas mettre ce qu'il faut ... )




0
jee pee Messages postés 39649 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
5 juin 2020 à 19:29
pour info j'avais corrigé le sql, tu as la première version, fausse, qui n'utilise pas l'id
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 juin 2020 à 21:06
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


0
SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 1
6 juin 2020 à 09:53
OK super
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 ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
6 juin 2020 à 10:05
Il faut que tu cherches les jointures SQL
0
SM05 Messages postés 10 Date d'inscription jeudi 4 juin 2020 Statut Membre Dernière intervention 12 juillet 2020 1
6 juin 2020 à 10:08
Ok merci pour tout
0
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 ";
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
20 juin 2020 à 11:04
SELECT CONCAT( B.version , C.version ) as ma_concatenation


PS: A l'avenir, pour une nouvelle question... créé une nouvelle discussion. Tu as de la chance que j'ai vu que tu avais posté un nouveau message dans celle la.
0
Ok pour la solution ( ça marche bien ).

Bien noté pour le conseil.

Merci.
0