Achetez et vendez votre matériel multimédia d'occasion sur notre service de petites annonces informatiques gratuites

[PHP - MYSQL] Jointures: blog [Résolu]

Forum informatique > Aide création et gestion de site > [PHP - MYSQL] Jointures: blog [Résolu]

<<<1>>>

[Page 1 sur 1 - 4 messages]
Informations Messages

Orangeloulou

Avatar de Orangeloulou
133 messages
Carte Graphique 3D
Carte Graphique 3D

Lien direct Le 17 Janvier 2010 à 16h48

Bonjour,

je souhaite réaliser un petit script de blog pour mes besoins personnels sans avoir à utiliser un gros script tel que wordpress ou autre. Avant de vous exposer mon souci, voici ma situation.

Trois tables:


    [*:2j9pab8s]articles : contient les articles[/*:m:2j9pab8s]
    [*:2j9pab8s]categories : toutes les catégories du blog[/*:m:2j9pab8s]
    [*:2j9pab8s]commentaires : les commentaires postés par les visiteurs[/*:m:2j9pab8s]



Voici trois copies d'écrans des tables:
Table: articles

Idc: id de la categorie
date: date de l'ajout de l'article

Table: categories

date: date de la création de la catégorie

Table: commentaires

ida: id de l'article pour lequel le commentaire a été posté

----------------

Dans ma page d'accueil du blog, je souhaite afficher: le début d'article, le titre de l'article, le nombre de commentaires et la catégorie dans laquelle a été postée l'article. Vous l'aurez compris, faire cela sans les jointures: c'aurait été un massacre.

Voici ma requête SQL:

Code

SELECT
articles.id AS aid,
articles.idc AS aidc,
articles.titre AS atitre,
articles.date AS adate,
articles.article AS article,
commentaires.id AS coid,
commentaires.ida AS coida,
categories.id AS caid,
categories.titre AS catitre,
count(commentaires.id) AS nombre
FROM articles, commentaires, categories
WHERE articles.id = commentaires.ida
AND articles.idc = categories.id GROUP BY articles.id LIMIT $base, $limite



Mon problème est le suivant: Si aucun commentaire n'a été posté pour l'article en question, il ne s'affiche pas. Par exemple:

J'ai un article ayant l'id 1 ayant comme nom "test" et un article ayant l'id "2" et comme nom "Orange".

Pour l'article 1, on a posté un commentaire et pour l'article 2 aucun commentaire. L'article 1 s'affiche mais pas le 2 car il n'a aucun commentaire.

J'ai atteint mes limites en SQL et mes recherches n'ont rien donné... J'espère que j'ai été clair.

Merci d'avance pour l'aide que vous pourrez m'apporter.

 

Pouzy

Avatar de Pouzy
14155 messages
No-Life
No-Life
Administrateur
Administrateur

Lien direct Le 17 Janvier 2010 à 18h42

Coucou,

Il faut utiliser LEFT JOIN ou RIGHT JOIN selon tes besoins, mais pas le INNER JOIN que tu utilises (je penses que tu es au courant que le raccourci que tu utilises est un INNER JOIN).

LEFT JOIN te sortira tous les résultats de la table de gauche, même s'il n'y a pas d'enregistrement correspondant dans la table de droite (un "faux' enregistrement sera affiché, avec des valeurs nulles) et RIGHT JOIN inversement

Flèche http://dev.mysql.com/doc/refman/5.0/fr/join.html

Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
 

Orangeloulou

Avatar de Orangeloulou
133 messages
Carte Graphique 3D
Carte Graphique 3D

Lien direct Le 18 Janvier 2010 à 00h24

Salut Pouzy,

Merci infiniment de ton aide. Je viens de modifier mon code et ça marche parfaitement. Si jamais quelqu'un aurait le même souci, voici ma requête:

Code

SELECT
articles.id AS aid,
articles.idc AS aidc,
articles.titre AS atitre,
DATE_FORMAT(articles.date, 'le %d/%m/%Y à %k:%H:%s') AS adate,
articles.article AS article,
commentaires.id AS coid,
commentaires.ida AS coida,
categories.id AS caid,
categories.titre AS catitre,
count(commentaires.id) AS nombre
FROM articles LEFT JOIN commentaires ON articles.id = commentaires.ida, categories
WHERE articles.idc = categories.id GROUP BY articles.id LIMIT $base, $limite



Pour être honnête, j'ai pris la version simplifié (sans le left/right join) car je trouvais cela plus pratique mais don mon cas, j'avais besoin du LEFT JOIN. Merci infiniment. La solution était toute bête finalement.

Problème résolu. Encore merci.

 

Pouzy

Avatar de Pouzy
14155 messages
No-Life
No-Life
Administrateur
Administrateur

Lien direct Le 18 Janvier 2010 à 08h58

Hello

Toujours au RDVContent

Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
 

<<<1>>>

[Page 1 sur 1 - 4 messages]

Forum informatique > Aide création et gestion de site > [PHP - MYSQL] Jointures: blog [Résolu]