Requête sur deux tables

Nouveau WRInaute
bonsoir, je voudrais un conseil sur un requête dont j'ai besoin pour mon site.

j'ai deux tables : la première News contenant id_news, titre, contenu et date.
la deuxième Utilisateurs contenant : id_utilisateurs, nom_utilisateur, email_utilisateur, ville_utilisateur

et j'aimerais pouvoir afficher toutes ces infos si la news a été publiée aujourd'hui et par des utilisateurs vivant dans la même ville

Code :
SELECT COUNT(*) AS total
FROM Utilisateurs, News
WHERE Utilisateurs.nom_utilisateur = News.nom_utilisateur
AND ville_utilisateur='Paris'
AND date='$date';ca m'affiche bien toutes les news venant d'utilisateurs de la même ville, mais par contre pour la date il y a une légère erreur, ca m'affiche toutes les news de la table , si une news au moins a été écrite ce jour là ...

qu'en pensez-vous ? quelqu'un a une idée ?
merci, bonne soirée.
 
WRInaute passionné
Hummm, là ta requête va chercher les news d'utilisateurs venant de paris ayant écrit une news à la date $date.
La syntaxe me semble correct (sauf que faire une jointure sur un nom alors qu'on a des ID c'est pas du tout recommandé).

Vérifie après ce que contient de variable $date (est ce bien sous la forme aaaa-mm-jj? Est ce que tes tables ont bien un champs date de type date ou datetime?
 
Nouveau WRInaute
re:

j'ai quasiment aucun doute sur ma variable date, car cette requête me ramene toutes les news de ma table si une au moins a été écrite au jour demandé, c'est bien ça le problème.

pour la jointure c'est préférable que je rajoute un id dans les deux tables, c'est bien ça ?
 
WRInaute passionné
Tu as oublié de préciser que nom_utilisateur doit aussi être un champ de News, non ? :roll:
 
Nouveau WRInaute
re:

je pense pas, il me semble que cette ligne sert à ça ? non !?
WHERE Utilisateurs.nom_utilisateur = News.nom_utilisateur

mais je suis pas sur...
 
WRInaute passionné
Cette ligne qui met en place une jointure suppose que tu aies un champ commun dans les 2 tables qui ici serait nom_utilisateur...
Mais comme le dit Bactéries, il vaut mieux que cela soit id_utilisateurs qui permettent la jointure (si j'ai bien compris une news est écrite par un utilisateur... c'est cela ?).

Mets à jour ta table News, en incluant un champ id_utilisateurs qui te permettra de faire ta jointure...
Code:
SELECT COUNT(*) AS total 
FROM Utilisateurs, News 
WHERE Utilisateurs.id_utilisateurs = News.id_utilisateurs 
AND Utilisateurs.ville_utilisateur='Paris' 
AND News.date='$date';
 
WRInaute discret
Je pense plutôt par une 3è table

News(id_news, titre, contenu, date)
Utilisateurs(id_utilisateurs, nom_utilisateur, email_utilisateur, ville_utilisateur)
News_Utilisateurs(id, id_news, id_utilisateurs, date)

Dont la news que l'utilisateur a publié pour la date donnée
 
WRInaute passionné
cyberlahy a dit:
Je pense plutôt par une 3è table

News(id_news, titre, contenu, date)
Utilisateurs(id_utilisateurs, nom_utilisateur, email_utilisateur, ville_utilisateur)
News_Utilisateurs(id, id_news, id_utilisateurs, date)

Dont la news que l'utilisateur a publié pour la date donnée

Deux tables suffisent si la news a été publiée par un utilisateur et un seul.

Une troisième table sera utile en cas de publication collective possible d'un news (donc par plusieurs utilisateurs) à des dates diverses...
Mais dans ce cas et uniquement dans ce cas, le champ date n'a plus à figurer dans la table News, non ?
Enfin, il doit être possible de concaténer id_news et id_utilisateurs pour former la clé primaire de la 3ème table News_Utilisateurs qui recense la participation d'un rédacteur à un article.

Le tout est de bien préciser la situation et de définir ce que l'on entend par 'date' par exemple... et je dois dire que je ne suis pas trés sur de voir qui fait quoi dans ce cas de figure... :roll:
 
Discussions similaires
Haut