Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 06/07/2011, 23h22   #1
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 45
Points : 2
Points : 2
Par défaut récupération de la valeur d'un champs

bonsoir,
Alors voila, j'ai un petit pbm.
Je travaille sur un scipt de forum assez basique.

Ce que je voudrai faire, c'est faire apparaitre le nom de la personne qui a répondu en dernier en face du titre du message, du nombre de vue, de reponses, etc...
Pour cela, j'ai un champs "nom" "date_insertion" (date a laquelle a été posté la question ou la réponse) "date_message"(date du 1er message. Lorsqu'un nouvel enregistrement est effectué, "date_message" prend automatiquement la date se trouvant dans "date_insertion" du 1er message).
Comment faire donc sortir le nom en rapport avec la derniere entrée dans "date_insertion"?
Ce que j'ai réussi a faire pour le moment, c'est récupérer le nom de l'auteur du 1er post... Pas interressant

Merci
moimeme340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 07h34   #2
Membre régulier
 
Étudiant
Inscription : octobre 2010
Messages : 92
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 92
Points : 78
Points : 78
J'ai bien compris ce que tu veux faire, mais pas du tout ton explication de l'existant. Tu as cb de table et cb de champ ?
zeclad01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h07   #3
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Je pense que date_message ne sert à rien. Avec une requête du style :

Code :
select * from message order by date_insertion desc limit 1
Ca ne marcherait pas ?
__________________
Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 12h50   #4
Membre confirmé
 
Avatar de Retrokiller069
 
Homme Bertrand
Étudiant
Inscription : octobre 2010
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Bertrand
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 216
Points : 268
Points : 268
Bonjour,

je ne suis pas sur que tu puisses le faire. Ou du moins pas avec la table que tu nous donnes. Tu devrais distinguer le fait que quelqu'un pose une question ou qu'il y réponde ainsi tu pourras mieux obtenir la dernière personne qui a posté le message.

table:
Code :
1
2
3
 
question: id_ques | nom_utilisateur_ques | date_insertion_ques ...
reponse: id_rep | id_ques | nom_utilisateur_rep | date_insertion_rep ...
ainsi avec une petite requete sql tu arriveras facilement à obtenir ce que tu veux:
Code :
1
2
3
4
5
6
 
select nom_utilisateur_rep 
from reponse 
where id_ques="idQuestionRécupéré"
order by date_insertion_rep
limit 1
Voila j'espère que ca va t'aider ^^
__________________
Ce n'est pas ce que nous voulons faire qui est impossible mais ce sont les moyens à sa mise en oeuvre qui peuvent le paraître

Ps: N'oubliez pas SVP
Retrokiller069 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h04   #5
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 45
Points : 2
Points : 2
Merci de vos réponses

zeclad01:
J'ai 1 table forum avec 10 champs
Code :
id, nom, email, date_insertion, titre_mess, texte, id_reponse, ip, nb_lect, date_reponse.
J'ai oublié de préciser que id_reponse prend la valeur de l'id de l'auteur de la question. Donc quand une personne poste une question, la valeur de id_reponse = 0 et à toutes les réponses qui lui sont associées, id_reponse prend la valeur de l'id de l'auteur de la question. Suis je clair la??

Voici ma table (j'ai enlevé ce qui ne me semble pas utile pour cette requête)
Code :
1
2
3
id=1, nom=pierre, date_insertion=2011-07-07 15:20:00, id_reponse=0, date_reponse=2011-07-07 15:22:00
id=2, nom=paul, date_insertion=2011-07-07 15:21:00, id_reponse=1, date_reponse=2011-07-07 15:21:00
id=3, nom=jaques, date_insertion=2011-07-07 15:22:00, id_reponse=1, date_reponse=2011-07-07 15:22:00
Donc, dans mon tableau, il y a une colonne qui reçois pierre à 2011-07-07 15:20:00 et la colonne a coté, il doit y avoir jaques à 2011-07-07 15:22:00

Elwyn:
J'ai essayé ta requête, mais elle ne me retourne que la dernière entrée

Retrokiller069:
Tu as raison, ça aurai du être fait comme ça. Ça aurai surement été plus simple, mais maintenant que tout est fait, je me vois mal recommencer :-)

Merci a tous de votre participation
moimeme340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h26   #6
Membre confirmé
 
Avatar de Retrokiller069
 
Homme Bertrand
Étudiant
Inscription : octobre 2010
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Bertrand
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 216
Points : 268
Points : 268
Ben du coup tu peux utiliser ma requête, elle ne sera pas trop différente:

Code :
1
2
3
4
5
select nom
from tatable
where id_reponse="idRécupéré"
order by date_reponse desc 
limit 1
l'idRécupéré correspond à l'id de la question que tu es en train de voir. Normalement cela te retourne ce que tu veux. (Je ne suis pas sur pour "desc" si ca te donne l'inverse ne mets rien).

En espérant que ca marche...
__________________
Ce n'est pas ce que nous voulons faire qui est impossible mais ce sont les moyens à sa mise en oeuvre qui peuvent le paraître

Ps: N'oubliez pas SVP
Retrokiller069 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h19   #7
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 45
Points : 2
Points : 2
merci Retrokiller069, mais je m'en sors vraiment pas...

Je vous laisse la parti de code que j'utilise pour appeler l'index du forum (titre, auteur, date ajout, nombre de fois vue, nombre de réponses, date du dernier post et ce qu'il me manque, l'auteur du dernier post)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$sql = 'SELECT id,nom, email,date_insertion,titre,lect,date_reponse FROM forum WHERE id_reponse="0" ';
$sql.= ' ORDER BY date_reponse DESC, date_insertion DESC LIMIT '.mysql_escape_string($limit1).', ';
$sql.= mysql_escape_string($limit);
$res = mysql_query($sql) or die(showError('3', mysql_error()));
$nb = mysql_num_rows($res);
 
 
if($nb>0) {
	while(list($id,$nom,$email,$dateheure,$titre,$lect,$dateajoute) = mysql_fetch_row($res)) {
		$titre = substr($titre, 0, $carac);
		$titre = stripslashes(stripslashes($titre));
 
                $lect = substr($lect, 0, $carac);
		$lect = stripslashes(stripslashes($lect));
Quelqu'un a un avis???
moimeme340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h31   #8
Membre confirmé
 
Avatar de Retrokiller069
 
Homme Bertrand
Étudiant
Inscription : octobre 2010
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Bertrand
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 216
Points : 268
Points : 268
Houla, je crois que j'avais pas compris ce que tu voulais.
Tu veux le dernier message du dernier poste?

si c'est ça la requête est comme ceci:
Code :
1
2
3
4
5
6
7
8
9
10
 
select nom
from forum 
where id_reponse in (Select id
                             from forum 
                             where id_reponse=0
                             order by date_insertion desc
                             limit 1)
order by date_reponse desc
limit 1;
voila normalement c'est bon tiens nous au jus

ps: il y a peut être plus simple avec ca:
Code :
select * from message order by date_reponse desc limit 1
__________________
Ce n'est pas ce que nous voulons faire qui est impossible mais ce sont les moyens à sa mise en oeuvre qui peuvent le paraître

Ps: N'oubliez pas SVP
Retrokiller069 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h51   #9
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 45
Points : 2
Points : 2
C'est cool Retrokiller069 de me suivre... :-)

Je crois que j'arrive pas a me faire comprendre
Je créé un forum, comme tout forum qui se respecte, sur la 1ere page apparait le titre du message(qu'on va appeler question), le nom de l'auteur de la question, la date de création de la question, le nombre de fois que la question a été vue, le nombre de réponses a cette même question, la date de la dernière réponse à la question et le nom de l'auteur de la dernière réponse(que je n'arrive pas a insérer).

Le code que j'ai posté permet tout ceci, sauf le nom de l'auteur du dernier post.

Retrokiller069? une nouvelle idée???
moimeme340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h57   #10
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 45
Points : 2
Points : 2
au fait, lorsque je lance ton code dans easyphp, ça me retourne #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Pourtant c'est la dernière version.
moimeme340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 08h35   #11
Membre confirmé
 
Avatar de Retrokiller069
 
Homme Bertrand
Étudiant
Inscription : octobre 2010
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Bertrand
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 216
Points : 268
Points : 268
Bonjour,
Code :
1
2
3
4
5
select nom
from forum
where id="idQuestionRécupéré"
order by date_reponse desc
limit 1
je ne comprends pas pourquoi cela ne marche pas??? Enlève "limit 1", au pire tu feras se traitement lorsque tu le récupéreras en PHP

Citation:
Envoyé par moimeme340 Voir le message
sur la 1ere page apparait le titre du message(qu'on va appeler question)
bon déjà si tu as la question cela veux dire que tu as sont "idQuestionRécupéré".

test dans phpMyAdmin pour voir si cela marche (prend un idQuestionRécupéré présent dans la base et dis moi si ca marche).

Apparemment, je ne le savais pas mais sql ne c'est pas faire de "IN" ou "NOT IN".

Citation:
Envoyé par moimeme340 Voir le message
LIMIT '.mysql_escape_string($limit1).', ';
je pense aussi qu'il n'aime pas la virgule placé après ta valeur limite.

Je te laisse tester, tiens nous au courant sinon poste ce que tu as fait, l'erreur causé et retourne aussi ta requete php (un petit echo de $sql pour voir ce qu'il contient au final).
__________________
Ce n'est pas ce que nous voulons faire qui est impossible mais ce sont les moyens à sa mise en oeuvre qui peuvent le paraître

Ps: N'oubliez pas SVP
Retrokiller069 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 10h01   #12
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Il faut revoir ton modèle de données. Quelque chose comme ça serait plus interessant :

Code :
1
2
3
4
5
Question
id_question, id_auteur, titre, message, date, nb_vue
 
Reponse
id_reponse, id_question, id_auteur, message, date, vote
Si tu fais ce travail maintenant, tu auras moins de problèmes par la suite, surtout qu'un forum ne se code pas comme ça

Tous les autres taitements se font via des requêtes en complément de PHP.
Par exemple pour le nombre de réponses à une question, c'est une requête très simple.

Code :
select count(*) as count from reponse where id_question = 1
Pour trouver la dernière personne qui a répondu à une question, c'est la requête que j'ai posté plus haut, en rajoutant en paramètre l'identifiant de la question.

Code :
select * from reponse where id_question = 1 order by date_insertion desc limit 1
Il faut bien garder à l'esprit qu'on ne doit pas (au maximum, en théorie) rajouter de champs inutiles (SOMME, NB_REPONSES, etc..)
__________________
Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/07/2011, 11h31   #13
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : mai 2011
Messages : 45
Points : 2
Points : 2
Bonjour a tous,

Je pars pour le WE et n'ai donc pas le temps de regarder tout ça.
Je vous tiens au courant lundi.
Merci de votre intérêt et bon WE a tous
moimeme340 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h39.


 
 
 
 
Partenaires

Hébergement Web