Page 1 sur 1

Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 07:04
par AlexCode
Bonjourr à tous,

Je me heurte à un soucis depuis ce WE...

J'aimerai récupérer les données stockées dans deux tables différentes et les ranger par date décroissantes. J'ai un soucis notamment dans la rédaction du query.

Ces deux tables ont en point commun uniquement une colonne en l'occurence l'ID de la catégorie.

D'habitude j'utilise ce code pour récupérer les informations d'une table et les afficher :
$sql2 = $bdd->query("SELECT * FROM table1 WHERE category_id='".$cid."' ORDER BY table1_reply_date DESC");
 
    if ($sql2->rowcount() > 0)
    {
        while ($row = $sql2->fetch(PDO::FETCH_ASSOC))
        {
            $tid = $row['id'];
            $cid= $row['category_id'];
 
            $views = $row['table1_views'];
            $date = $row['table1_date'];
 
            $topics .=
            "
                ".$views."
                ".$date."
            ";
        }
        echo $topics;
    }
    else
    {
        echo "<a href='index.php'>Retour à l'index</a>";
        echo "<p>Aucune donnée dans cette catégorie</p>";          
    }
Donc en gros ce que j'aimerai c'est un truc de ce genre :
$sql2 = $bdd->query("SELECT * FROM [b][i][u]table1, table 2[/u][/i][/b] WHERE category_id='".$cid."' ORDER BY [b][u]table1_reply_date, table1_reply_date[/u][/i][/b] DESC");
 
    if ($sql2->rowcount() > 0)
    {
        while ($row = $sql2->fetch(PDO::FETCH_ASSOC))
        {
            $tid = $row['id'];
            $cid= $row['category_id'];
 
            $views1 = $row['table1_views'];
            $date1 = $row['table1_date'];

            $views2 = $row['table2_views'];
            $date2 = $row['table2_date'];
 
            $topics .=
            "
                ".$views1." OR  ".$views2."
                ".$date1." OR   ".$date2."
            ";
        }
        echo $topics;
    }
    else
    {
        echo "<a href='index.php'>Retour à l'index</a>";
        echo "<p>Aucune donnée dans cette catégorie</p>";          
    }
Si vous voulez ce sont des billets un du type citation et un du type avis, qui seront afficher sur une même page car ils appartiennent à une même catégorie.

Merci d'avance aux personnes qui m'aideront,

AlexCode

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 09:11
par Mazarini
Bonjour,

Pour faire un select sur 2 tables, il faut indiquer comment on lie les 2 tables :

Code : Tout sélectionner

select * from table1, table2 where table1.nomColonneX = table2.nomColonneY
Ensuite, tu appliques les conditions que tu souhaites :

Code : Tout sélectionner

select * from table1, table2 where table1.category_id = table2category_id and table1.category_id = 123

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 09:33
par Ryle
En complément de la réponse de Mazarini, pour ma part je préfère la syntaxe avec les joins explicites. Non seulement elle est compatible avec d'avantage de bases de données, mais elle permet également de dissocier les critères de rapprochement des tables des critères de filtres de la requête.
SELECT ... 
  FROM table1 t1
    INNER JOIN table2 t2 ON t1.category_id = t2.category_id 
    INNER JOIN ...
  WHERE t1.category_id = 123
    AND ...

On peut également plus facilement basculer d'une jointure interne à une jointure externe :)

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 12:35
par AlexCode
Merci à tous les deux ! Sincèrement !

Je vais fonctionné par étape et j'en suis désolé !

J'ai donc opéré comme vous m'avez expliqué et j'ai donc ce code :
$sql2 = $bdd->query("SELECT * FROM avis INNER JOIN citation ON avis.category_id = citation.category_id WHERE table_1.cat_id = '".$cid."' ORDER BY avis_reply_date, citation_reply_date DESC");

 
    if ($sql2->rowcount() > 0)
    {
        while ($row = $sql2->fetch(PDO::FETCH_ASSOC))
        {
            $tid = $row['id'];
            $cid= $row['category_id'];
 
            $views = $row['table1_views'];
            $date = $row['table1_date'];
 
            $topics .=
            "
                ".$views."
                ".$date."
            ";
        }
        echo $topics;
    }
    else
    {
        echo "<a href='index.php'>Retour à l'index</a>";
        echo "<p>Aucune donnée dans cette catégorie</p>";          
    }
J'ai juste modifié la première ligne pour le moment ! Malheureusement je me retrouve devant un erreur de RowCount, apparemment on en fait pas sur le query, du coup je bute sur la syntaxe...

Le but du RowCount était de voir si ma requête à zéro résultat alors...

Je suis désolé...

Merci en tout cas,

AlexCode

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 15:35
par Ryle
Je penche pour une erreur dans ta requête SQL, à vue de nez, ici :
WHERE table_1.cat_id = '".$cid."' 
________^ ______^
Cela devrait mieux fonctionner avec avis.category_id :)

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 17:33
par AlexCode
Mon Dieu la bêtise ! #-o

Effectivement j'ai plus d'erreur sur le rowcount... Merci @Ryle ! :D

Alors du coup maintenant comment je peux m'arranger dans le echo via $topics pour que la valeur de $views et $date vont chercher dans les deux tables et affichent en fonction du ORDER déterminé ?

Car là en faite, il me sort les résultats que ma table avis et en plus en double exemplaire...

Encore merci,

AlexCode

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 17:49
par AlexCode
Et avec un UNION entre les deux tables ça serait plus simple et plus propre non ?

Re: Query, SELECT sur deux tables...

Posté : 13 oct. 2015, 21:50
par AlexCode
Tout est résolu, j'ai réussi via un UNION des deux tables c'était vachement plus simple !

Merci à tous, j'ai beaucoup appris grâce à vous !

AlexCode