IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Liste et croisement de tables (RR.champ1 RVR.champ2)


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut Liste et croisement de tables (RR.champ1 RVR.champ2)
    Bonjour,

    Sur mon site les visiteurs peuvent enregistrer un rêve soit en étant inscrit (ils se voient alors attribuer un id individuel et permanant - si le membre modifie son pseudo, son id reste quand mm le même -, soit en ne l'étant pas (leur id est alors égal à 0 - merci encore à gilmaire de m'y avoir fait pensé !).

    J'ai 2 tables :
    - reves avec les champs suivants (entre autres) : id, titre, reve, pseudo, pseudo_id, date...
    - reves_reveurs, avec les champs suivants (entre autres) : id, pseudo,...

    Dans la table reves l'id correspond à l'id du rêve, pseudo au pseudo du rêveur si il n'est pas inscrit, et pseudo_id correspond à l'id du membre dans la table reves_reveurs.

    J'arrive à afficher un rêve individuellement, que celui-ci ait été posté par un inscrit ou non, et en fonction de cela afficher ou non un lien vers la page du rêveur. Le code est sur ce post...

    Je veux maintenant faire quelque chose de similaire mais pour afficher les 10 derniers rêves sur une page. Cependant avec le code suivant, seuls les rêves des non-inscrit s'affichent .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    // Sélection des rêves online
    $sql = "SELECT RR.id, RR.pseudo_id, RR.pseudo, RR.email, RR.email_publication, RR.titre, RR.reve, RR.date, RRVR.pseudo as pseudo_inscrit FROM reves_reves RR, reves_reveurs RRVR WHERE RR.activity='on' AND RRVR.id = RR.pseudo_id ORDER BY RR.id DESC LIMIT $reves_bckid,$nb_reves_aff";
    if ($req = mysql_query($sql)) {
    	$db_data_reves = mysql_fetch_assoc($req);
    }
    else {
    	mysql_error_msg();
    }
     
    echo "<div class=\"reves\">";
     
    // Affichage des rêves
    while($db_data_reves = mysql_fetch_assoc($req)) {
     
    	// Affichage du rêve
    	echo "<h2 id=\"r".$db_data_reves['id']."\"><a href=\"reve.php?id=".$db_data_reves['id']."&amp;titre=";
    	titre_url($db_data_reves['titre']);
    	echo "\">".$db_data_reves['titre']."</a></h2>
    	<p class=\"reve_infos\">Le ";
    	datetime_fr($db_data_reves['date']);
     
    	// Si le rêveur est inscrit
    	if ($db_data_reves['pseudo_id'] >= 1) {
    		echo ", <a href=\"reveur-infos.php?pseudo_id=".$db_data_reves['pseudo_id']."\">".$db_data_reves['pseudo_inscrit']."</a>";
    	}
     
    	// Si le rêveur n'est pas inscrit
    	else {
    		if ($db_data_reves['email_publication'] == 'yes') {
    			echo ", ".$db_data_reves['pseudo']." (<a href=\"mailto:".$db_data_reves['email']."\">@</a>)";
    		}
    		else {
    			echo ", ".$db_data_reves['pseudo'];
    		}
    	}
    	echo " a confié le rêve suivant à la boîte à rêves :</p>
    	<p class=\"reve\">".$db_data_reves['reve']."</p>
    }
    Je ne comprends pas pourquoi. Qu'en pensez-vous svp ?

    ps : ma version MySQL est la 4.0.17 (si cela a une importance pour les éventuelles améliorations de requêtes...).

  2. #2
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    t'as testé ta alors ca semble venir de la condition..le where et surment dans le

    RRVR.id = RR.pseudo_id

    Mais bon je modifierais la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = "SELECT RR.id, RR.pseudo_id, RR.pseudo, RR.email, RR.email_publication, RR.titre, RR.reve, RR.date, RRVR.pseudo as pseudo_inscrit 
    FROM reves_reves  as RR
    INNER JOIN reves_reveurs as RRVR 
    ON rr.pseudo_id = RRVR.id
    WHERE RR.activity='on' AND RRVR.id = RR.pseudo_id 
    ORDER BY RR.id";
    Mais bon je ne suis pas certain encore du where, ca me semble louche ce qu'il y a après le AND

    enfin essaie ca..j'espere t,avoir mis sur une piste

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Mmm malheureusement ça ne marche toujours pas .

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Si RRVR.id est égal à 0 si aucun auteur n'est spécifié, alors c'est pas un INNER JOIN qu'il faut, mais un LEFT OUTER JOIN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = "
      SELECT RR.id, RR.pseudo_id, RR.pseudo, RR.email, RR.email_publication, RR.titre, RR.reve, RR.date, RRVR.pseudo as pseudo_inscrit 
     
      FROM reves_reves  as RR
      LEFT OUTER JOIN reves_reveurs as RRVR 
      ON RRVR.id = RR.pseudo_id 
     
      WHERE RR.activity='on'
      ORDER BY RR.id
      LIMIT $reves_bckid, $nb_reves_aff
    ";
    Ensuite, dans le code PHP, il faudra vérifier si les colonne correspondant à RRVR sont NULL.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Je viens de remarquer que si j'ajoutais un rêve plus récent que celui d'un membre inscrit, celui du membre inscrit apparaissait.

    Mais en fait il semblerait que ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT RR.id, RR.pseudo_id, RR.pseudo, RR.email, RR.email_publication, RR.titre, RR.reve, RR.date, RRVR.pseudo as pseudo_inscrit FROM reves_reves RR, reves_reveurs RRVR WHERE RR.activity='on' AND RRVR.id = RR.pseudo_id ORDER BY RR.id DESC LIMIT $reves_bckid,$nb_reves_aff";
    n'affiche pas le premier rêve (et cela sur chaque page de mes pages de navigation affichant plusieurs rêves). Que le premier rêve de la page (et donc le plus récent de ceux de chaque page affichan plusieurs rêves) soit celui d'un membre ou non, il n'est pas affiché avec cette requête :s.

    Alors que la requête suivante marche correctement de ce point de vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT id,pseudo,email,email_publication,titre,reve,date FROM reves_reves WHERE activity='on' ORDER BY id DESC LIMIT $reves_bckid,$nb_reves_aff";
    Je ne vois pas de différence entre ces 2 requpetes de ce point de vue là.

    Note :
    $nb_reves_aff correspond au nombre de rêves à afficher par page (nombre possiblement choisi par le membre, sinon sa valeur est égale à 10 par défaut)
    $reves_bckid = $p*$nb_reves_aff; ou $p est le numéro de la page

    Update - Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT RR.id, RR.pseudo_id, RR.pseudo, RR.email, RR.email_publication, RR.titre, RR.reve, RR.date, RRVR.pseudo as pseudo_inscrit FROM reves_reves RR, reves_reveurs RRVR WHERE RR.activity='on' AND RRVR.id = RR.pseudo_id ORDER BY RR.id DESC LIMIT[b] 0,10[/b]";
    Cela n'affiche toujours pas le plus récent rêve

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Je remets à plat la situation dans un nouveau post, que j'espère plus compréhensible pour les membres du forum .

Discussions similaires

  1. [SQL Server]La liste de toutes les tables
    Par Husqvarna dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/09/2008, 17h21
  2. Réponses: 12
    Dernier message: 20/04/2006, 15h23
  3. Réponses: 14
    Dernier message: 13/12/2005, 11h58
  4. Liste de toutes les tables d'une base inconnue
    Par TTiger dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/11/2005, 08h59
  5. Réponses: 12
    Dernier message: 23/06/2005, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo