Requête SQL 2 tables

-
 omlaly -
Bonjour,

Je cherche à sélectionner les commentaires de l'article correspondant.

Voici les CREATE TABLE des 2 tables :
ARTICLES :
CREATE TABLE IF NOT EXISTS `articles` (
  `id_article` int(11) NOT NULL AUTO_INCREMENT,
  `nom_village` varchar(255) CHARACTER SET latin1 NOT NULL,
  `nom_categorie` varchar(255) CHARACTER SET latin1 NOT NULL,
  `date_depot` datetime NOT NULL,
  `titre_article` varchar(255) NOT NULL,
  `texte_article` text NOT NULL,
  `auteur_article` varchar(255) NOT NULL,
  PRIMARY KEY (`id_article`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=80 ;


COMMENTAIRES :
CREATE TABLE IF NOT EXISTS `commentaires` (
  `id_commentaire` int(11) NOT NULL AUTO_INCREMENT,
  `user_pseudo` varchar(255) NOT NULL,
  `id_village` int(11) NOT NULL,
  `date_depot` datetime NOT NULL,
  `texte_commentaire` text NOT NULL,
  PRIMARY KEY (`id_commentaire`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;


Est-ce qu'il ne faut pas faire une requête SQL imbriquée ?

En attendant vos réponses, je continue mes recherches...
Cordialement

71 réponses

Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
ça c'est la contrainte de jointure (qui permet d'associer les commentaires aux articles associés), pas la contrainte de filtre (qui permet de récupérer les commentaires que pour un article donné).

Je t'aiderai pas sur ce coup, si tu comprends pas c'est que t'as tout raté sur le SQL.
Le pire c'est que si tu reviens une ou deux pages avant tu l'avais bien écrite, c'est affligeant.
C'est la même requête SQL qu'avant.

Voici le code PHP de l'affichage :
$query_monumentsavisiter mysql_query("SELECT titre_article, texte_article, date_depot, auteur_article FROM articles WHERE nom_categorie 'Monuments_a_visiter' AND nom_village = 'nom village'") or die('Erreur lors de la requête SQL de la catégorie "nom categorie" '.mysql_error()); // Envoie une requête à un serveur MySQL
if(mysql_num_rows($query_monumentsavisiter) > 0){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
// Système de pagination trouvé sur : http://antoine-herault.developpez.com/tutoriels/php/pagination-automatique-en-php/
$messagesParPage=5; // Nombre de messages affichés par pages

$retour_total=mysql_query('SELECT COUNT(*) AS id_article FROM articles WHERE nom_categorie = "nomcategorie" AND nom_village	= "nomvillage"')  or die ('Erreur sur la requête SQL concernant le calcul du nombre d\'articles concernant le village'.mysql_error()); // Envoie une requête à un serveur MySQL -  Récupération du contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); // Rangement de $retour_total sous la forme d'un tableau

$total=$donnees_total['total']; // Récupération du total pour le placer dans la variable $total

// Comptage du nombre de pages
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else
{
     $pageActuelle=1; // La page actuelle est la n°1    
}

$premiereEntree=($pageActuelle-1)*$messagesParPage; // Calculer la première entrée à lire

// La requête SQL pour récupérer les messages de la page actuelle
$retour_messages=mysql_query('SELECT * FROM articles WHERE nom_categorie = "nom de la categorie" AND nom_village = "nom village" ORDER BY id_article DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'') or die ('Erreur sur la requête SQL concernant le nombre d\'articles'.mysql_error()); // Envoie une requête à un serveur MySQL

while($donnees_messages=mysql_fetch_assoc($retour_messages)) { // Lecture des entrées une à une grâce à une boucle

     // Affichage des messages avec le design
     // nl2br : Insère un retour à la ligne HTML à chaque nouvelle ligne - pour prendre en compte les sauts de ligne dans le message.
     echo ''.nl2br($donnees_messages['titre_article']).',

----

'.nl2br($donnees_messages['texte_article']).',

----

<td id=\"auteur_article_date_depot_numero_article\" align=\"right\" >
<small> Posté par :  '.(stripslashes($donnees_messages['auteur_article']).' -  '.dateLongue($donnees_messages['date_depot'])).'   -  Article N°'.nl2br($donnees_messages['id_article']).' </small>

';
echo '
Commentaires.

<form method  ="POST" action="adresse.php"><textarea name="texte_commentaire_article"></textarea>
</form>

';
    // Ajout des sauts de ligne pour espacer les messages (
)		
// Requête SQL pour déterminer l'identifiant de l'article correspondant
$query_selection_article_correspondant = mysql_query("SELECT articles.id_article, commentaires.date_depot, commentaires.texte_commentaire,commentaires.user_pseudo FROM articles, commentaires WHERE articles.id_article=commentaires.id_article") or die ('Erreur sur la requête SQL concernant la sélection de l\'article correspondant'.mysql_error()); // Envoie une requête à un serveur MySQL

while ($row = mysql_fetch_assoc($query_selection_article_correspondant)) {
   echo '';
echo '----
'.$row["user_pseudo"].', ';
echo ''.dateLongue($row["date_depot"]).', ';
   echo ''.$row["texte_commentaire"].'
';
}
}


En attendant vos réponses, je continue mes recherche...
Cordialement
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
ah oui, c'est pour le INSERT que tu l'avais bien écrite.
Ta requête de sélection des commentaires à toujours été punée.

Quoi qu'il en soit tu m'as saoulé à pas vouloir réfléchir.
Et plus ça va plus ta signature m'horripile (tu continues tes recherches ? mes coudes, ouai !)
Pas croyable de mettre une semaine pour 20 lignes de code quand quelqu'un te tient la main.
Dorénavant démerde toi.
Quand je teste cette requête SQL
SELECT articles.id_article, commentaires.date_depot, commentaires.texte_commentaire,commentaires.user_pseudo FROM articles, commentaires WHERE articles.id_article=commentaires.id_article
, elle me renvoie le bon résultat...

Tu crois que c'est elle qui bug ou la requête pour insérer les articles ?
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
C'est d'elle que vient le souci, mais elle ne bug pas, elle est juste mal écrite pour ce que tu veux faire.
Si tu me traduis en français ce que signifie cette requête, peut-être que je te montrerai où elle cloche.
Cette requête SQL signifie pour moi :
Tu sélectionnes l'identifiant de l'article (dans la table articles), la date dépot, le texte du commentaire, le pseudo de l'utilisateur (dans la table commentaires). Ces champs sont dans les tables : articles et commentaires. En rajoutant une condition : l'identifiant de l'article de la table articles doit être égal à l'identifiant de l'article de la table commentaire.
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
laborieux ... maintenant si je te dis que les valeurs dans mes tables sont celles-ci :

articles
id_article titre_article
1 'un article'
2 'un autre article'

commentaires
id_commentaire id_article text_commentaire
1 1 'trop cool'
2 1 'dla balle'
3 2 'un peu nul'
4 2 'bof bof'

Que doit te retourner cette requête ?
Pour moi, elle va retourner ça :
1 'un article'
1 1 'trop cool'
2 1 'dla balle'
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Non. Essaie encore.
J'ai réussi, ça marche !!!!!!!!!!