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

PHP & Base de données Discussion :

[SQL] Forum - Dernier message


Sujet :

PHP & Base de données

  1. #1
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut [SQL] Forum - Dernier message
    Bonjour, je viens de commencer à coder en php avec une bdd (ça peut paraître bizarre mais ça fait trois ans que je suis avec des fichiers) et je suis entrain d'essayer de faire un forum simple mais j'ai un petit problème pour trouver le dernier message d'un forum :

    J'ai trois tables :
    - catégories
    - forums
    - topics
    - Posts

    pour chaque table, parmi les autres, il y a un champ "id_up" (qui change selon la table : id_topic, id_forum, id_cat)

    Il correspond à l'ID de "son parent".

    Ex: le forum 1 qui a l'ID 34 contient un topic d'ID 12
    => dans le table du topic on trouve : ID = 12 id_forum = 34

    Alors pour trouver le dernier message d'un topic aucun problème : "SELECT * FROM forum_posts WHERE topic_id = '12' ORDER BY time DESC LIMIT 1"

    Mais pour trouver le dernier message d'un forum à part envisager de mettre tous les topics et tous les posts dans un tableau et de faire une boucle pour trouver tu s posts du forum, je ne vois pas de manière plus simple.

    Merci

  2. #2
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Si tu as bien construit ta base, normallement le dernier post serait celui avec l id le plus grand non?

    Sinon tu peux chopper le dernier id inserer dans post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $SQL = "SHOW  TABLE STATUS  FROM nomdetabase WHERE name = 'nomdetable' "
     
    tu choppes la colonnes Auto_increment et tu fais  -1 pour avoir le dernier Id inserer

  3. #3
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    ok, mais le truc c'est que juste avec l'ensemble des posts je ne sais pas dire à quel forum ils appartiennent, je connais juste leur topic.. Je devrais faire un intermédiaire..

  4. #4
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Oui tu peux rajouter une jointure pour trouver le numero du forum

  5. #5
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    Super tu saurais me donner la base de la requête parce que je débute en sql

  6. #6
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Oprichnik
    Super tu saurais me donner la base de la requête parce que je débute en sql

    C quoi la definition de tes bases?

  7. #7
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    C'est un petit forum :

    Code SQL : 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
    CREATE TABLE `simpleforum_cats` (
    `ID` int NOT NULL auto_increment primary key,
    `nom` text NOT NULL
    );
     
    CREATE TABLE `simpleforum_forums` (
    `ID` int NOT NULL auto_increment primary key,
    `id_cat` int NOT NULL,
    `nom` text NOT NULL,
    `description` text NOT NULL
    );
     
    CREATE TABLE `simpleforum_topics` (
    `ID` int NOT NULL auto_increment primary key,
    `id_forum` int NOT NULL,
    `auteur` text NOT NULL,
    `nom` text NOT NULL
    );
     
    CREATE TABLE `simpleforum_posts` (
    `ID` int NOT NULL auto_increment primary key,
    `id_topic` int NOT NULL,
    `auteur` text NOT NULL,
    `contenu` text NOT NULL,
    `time` int NOT NULL
    );

  8. #8
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Je verrais bien un select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $SQL = " Select p.id from simpleforum_post p, simpleforum_topic t where p.id_topic = t.id and t.id_forum = IDDUFORUMVOULU";
     
     
    Dsl mais je ne mets pas de jointure "complexe" car il vaut mieux que tu comprennes les bases de Sql.

  9. #9
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    Merci, à quoi correspond le p et le t ?

  10. #10
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Oprichnik
    Merci, à quoi correspond le p et le t ?
    Un alias du nom de la table ca evite d ecrire le nom de la base a chaque fois.

  11. #11
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    Ok, merci j'essaye cela.

  12. #12
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    Alors voilà le code qui affiche les forums et les catégories :

    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
    $request_cats = mysql_query("SELECT * FROM ".$tables_prefix."cats") or die(mysql_error());
     
    while($cat = mysql_fetch_array($request_cats)) {
     
    echo '
    <table class="table_cat" width=80% align="center" cellpadding="3" cellspacing=0>
    	<tr>
    		<td colspan=2>&nbsp;&nbsp;<a class="nom_cat" href="forum.php?cid='.$cat["ID"].'">'.$cat['nom'].'</a></td>
    	</tr>
    	';
     
    		$request_forums = mysql_query("SELECT * FROM ".$tables_prefix."forums WHERE id_cat = '".$cat["ID"]."'") or die(mysql_error());
     
    		while($forum = mysql_fetch_array($request_forums)) {
     
    			$SQL = "Select p.auteur from simpleforum_post p, simpleforum_topic t where p.id_topic = t.id and t.id_forum = ".$forum["ID"]." ORDER BY ID DESC LIMIT 1" or die(mysql_error());
     
    			$last_post_req = mysql_query($SQL);
    			$last_post = mysql_fetch_array($last_post_req);
     
    			echo '<tr><td><img src="'.$img["fleche"].'">&nbsp;<a class="nom_forum" href="forum.php?fid='.$forum["ID"].'">'.$forum["nom"].'</a> - '.$forum["description"].'</td><td>Dernier message par '.$last_post["auteur"].'</td></tr>';
     
    		}
     
    echo '		
    </table><br>
    ';
     
    }
    Seulement dans la variable $last_post j'ai false (avec var_dump

  13. #13
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Fais un echo de ton SQL et test le dans phpmyadmin et regarde ce que ca donne.

  14. #14
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    ok, j'ai trouvé c'était le "s" qui manquait aux noms de tables mais à présent j'ai :

    #1052 - Column 'ID' in order clause is ambiguous
    C'est à dire ?

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Que le champ id est commun à au moins deux tables, auquel cas vous devez préfixer le nom de ce champ par la table (ou son alias) concernée afin de lever cette ambiguïté, un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT p.id, p.nom FROM produits AS p, categories AS c WHERE p.cat_id = c.id;
    Où les tables produits et categories auraient toutes les deux un champ nommé id (ils n'ont ici aucun rapport).

  16. #16
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    Logique,

    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forum "Derniers messages" pas explicite
    Par GanYoshi dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 11/10/2010, 16h42
  2. [SQL] Système gestion dernier message + nombres sujets/réponses
    Par Dinan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/02/2007, 09h09
  3. [BUG?] Forum et dernier message posté.
    Par nikalkal dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 29/05/2006, 15h25
  4. Réponses: 8
    Dernier message: 10/05/2006, 17h00

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