Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/03/2007, 13h10   #1
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
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
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 13h27   #2
Membre habitué
 
Avatar de Shinji62
 
Inscription : novembre 2006
Messages : 135
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 135
Points : 133
Points : 133
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 :
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
Shinji62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 13h36   #3
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
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..
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 13h38   #4
Membre habitué
 
Avatar de Shinji62
 
Inscription : novembre 2006
Messages : 135
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 135
Points : 133
Points : 133
Oui tu peux rajouter une jointure pour trouver le numero du forum
Shinji62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 13h42   #5
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Super tu saurais me donner la base de la requête parce que je débute en sql
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h02   #6
Membre habitué
 
Avatar de Shinji62
 
Inscription : novembre 2006
Messages : 135
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 135
Points : 133
Points : 133
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?
Shinji62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h05   #7
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
C'est un petit forum :

Code SQL :
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
);
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h08   #8
Membre habitué
 
Avatar de Shinji62
 
Inscription : novembre 2006
Messages : 135
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 135
Points : 133
Points : 133
Je verrais bien un select :

Code :
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.
Shinji62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h20   #9
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Merci, à quoi correspond le p et le t ?
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h22   #10
Membre habitué
 
Avatar de Shinji62
 
Inscription : novembre 2006
Messages : 135
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 135
Points : 133
Points : 133
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.
Shinji62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h46   #11
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Ok, merci j'essaye cela.
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 14h55   #12
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Alors voilà le code qui affiche les forums et les catégories :

Code :
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
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 15h34   #13
Membre habitué
 
Avatar de Shinji62
 
Inscription : novembre 2006
Messages : 135
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 135
Points : 133
Points : 133
Fais un echo de ton SQL et test le dans phpmyadmin et regarde ce que ca donne.
Shinji62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 19h48   #14
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
ok, j'ai trouvé c'était le "s" qui manquait aux noms de tables mais à présent j'ai :

Citation:
#1052 - Column 'ID' in order clause is ambiguous
C'est à dire ?
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 20h00   #15
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2007, 20h13   #16
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Logique,

Merci pour votre aide !
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web