organisé commentaire et sujet d'un user

Eléphant du PHP | 417 Messages

28 juil. 2011, 19:16

Bonjour à tous le monde

comment on peux afficher tous les sujets et les commentaire que un user a créer? sachant que j'ai deux table une pour les sujet et l'autre pour les commentaires

Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 juil. 2011, 23:59

En sélectionnant sur les deux tables les tuples correspondants.

Tu fait la sélection avec l'id ou le pseudo suivant ce que t'a dans les tables.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

29 juil. 2011, 00:02

En sélectionnant sur les deux tables les tuples correspondants.

Tu fait la sélection avec l'id ou le pseudo suivant ce que t'a dans les tables.

@+
oui bon réponse mon prof :) mais ça je le sais ^^ le problème c'est dans la requete qui fait ça ^^ et j'attent tjr ta réponse sur l'autre sujet :)
php-debutant/requete-sql-distinct-t259771.html

jojija
Invité n'ayant pas de compte PHPfrance

30 juil. 2011, 19:57

Je suis pas trop fort avec ça, mais essaye en mettant a la fin de ta requette SQL : WHERE pseudo='$pseudo'
avec $pseudo : le pseudo de l'utilisateur dont tu veux vois les messages.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 juil. 2011, 01:13

bon, 1er test simple
select (SELECT COUNT(DISTINCT id_topic) from posts where pseudo_post='mido') as nb1, (SELECT COUNT(DISTINCT topic.id_topic) FROM topic where pseudotopic='mido')as nb2;

mais heu j'arrive pas a faire l'addition, me manque un truc ^^

faut que j'y réfléchisse, ça doit être réalisable (tous est possible tous est réalisable .... )

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

31 juil. 2011, 16:17

bon, 1er test simple
select (SELECT COUNT(DISTINCT id_topic) from posts where pseudo_post='mido') as nb1, (SELECT COUNT(DISTINCT topic.id_topic) FROM topic where pseudotopic='mido')as nb2;

mais heu j'arrive pas a faire l'addition, me manque un truc ^^

faut que j'y réfléchisse, ça doit être réalisable (tous est possible tous est réalisable .... )

@+
^^ toute a fait moogli c'es rélisable moi j'ai fait deux requete ^^
$totalPost = mysql_query('SELECT COUNT(DISTINCT posts.id_topic) FROM posts where pseudo_post="'.$_SESSION['pseudo'].'" ') or die (mysql_error()); //req pour compter le nb des message qui apartien au sujet en question
			$nbPostTotal= mysql_result($totalPost, 0); //range les résultats sous la forme d'un tableau.
			// $total=$donnees_total['1']; //récupère le total pour le placer dans la variable $total.
			$totalTopic = mysql_query('SELECT COUNT(DISTINCT topic.id_topic) FROM topic where pseudotopic="'.$_SESSION['pseudo'].'" ') or die (mysql_error()); //req pour compter le nb des message qui apartien au sujet en question
			$nbTopicTotal= mysql_result($totalTopic, 0); //range les résultats sous la forme d'un tableau.
			$nbParticipation = ($nbPostTotal + $nbTopicTotal);
mais le problème c'est quand je veux selection tous les sujet qu'il a crée ou il a commenté avec un order by c'est la ou je me blok
pour les sujet qu'il a créer si facile :) mais les commentaires c'est chiant lol

je peux faire deux requete :s mais avec une sa sera plus cool non ^^?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 juil. 2011, 17:32

avec ma requete t'a qu'un query, c'est deja ça, mais je suis sur que l'on peux faire mieux, ceci dit je vois pas comment, je suis un peu limité en SQL :/

$sql = 'select (COUNT(DISTINCT posts.id_topic)) , (COUNT(DISTINCT topic.id_topic)) from topic,posts where posts.pseudo_post = topic.pseudotopic and topic.pseudotopic=\''.'.$_SESSION['pseudo'].'\'';

en étant moins con je fait ça :
mysql> select (COUNT(DISTINCT posts.id_topic)) + (COUNT(DISTINCT topic.id_topic)) as nbtotal from topic,posts where posts.pseudo_post = topic.pseudotopic and topic.pseudotopic=\''.'.$_SESSION['pseudo'].'\'';

et ça donne 5 avec ce que tu m'a filé ;)

bon test :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

31 juil. 2011, 22:24

$sql = 'select (COUNT(DISTINCT posts.id_topic)) , (COUNT(DISTINCT topic.id_topic)) from topic,posts where posts.pseudo_post = topic.pseudotopic and topic.pseudotopic=\''.'.$_SESSION['pseudo'].'\'';
il est super ta requête ^^ ça donne meme résultat que les miens mais bcp mieux ^^ moin d code ^^

dans cette partie c'est fait pour compter le nb des résultat pour faire la pagination

maintenant j'ai un autre problème :D ( ça finira jamais je pense ^^ )
en fait quand je fait une requete juste pour sélection ces id_topic (les 5 soit les topic qu'il a créer ou il a commenté ) ça commence bien psk y a pas d'erreur sql ^^ sauf que dans la réquete pour les sujet ou il a commenté c'est bien il fait un distinct mais pour les sujet non il m'affiche l'ide de topic 4 fois :s plus 1 fois vu qu'il a commenté son sujet c'est pa normal ça :( voici la requête
$lesMsg = mysql_query ('select DISTINCT posts.id_topic,topic.id_topic from topic,posts where topic.id_topic = posts.id_topic and posts.pseudo_post ="'.$_SESSION['pseudo'].'" or topic.pseudotopic="'.$_SESSION['pseudo'].'" ORDER BY topic.date_mise_jour DESC, topic.time_mise_jour DESC, posts.date_post DESC, posts.time_post LIMIT '.$premiereEntree.', '.$messagesParPage.'') or die (mysql_error());
			while( $resultTopic = mysql_fetch_object( $lesMsg ) )
			{
				echo 'mon id est : '.$resultTopic->id_topic;
				echo '<br/>';
			}
résultat c'est :

mon id est : 1
mon id est : 8
mon id est : 11
mon id est : 11
mon id est : 11
mon id est : 11
mon id est : 11
mon id est : 10

le 1, 8 10 et UN 11 c'est les id des topic ou il a commenté
le 11 c'est id de topic qu'il a crée

je pense que le problem vien de DISTINCT posts.id_topic,topic.id_topic non ?
parceque quand j'inverse à DISTINCT topic.id_topic,posts.id_topic sans touché le reste de la requete les résultat change

mon id est : 1
mon id est : 8
mon id est : 8
mon id est : 12
mon id est : 1
mon id est : 10
mon id est : 11
mon id est : 10

:( je comprend pas normalement ça doit être

mon id est : 1
mon id est : 8
mon id est : 12
mon id est : 10
mon id est : 11

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 août 2011, 12:26

je pense que 4 fois car produits cartésiens, (1 topic multiplié par 4 commentaires :)

peux tu exprimer clairement, en français de france ;), ce que tu veux faire parce que franchement je suis pas certain (genre je veux compter tout les commentaire d'un pseudo précis).

avec ta requête si tu vire le topic.id_topic = posts.id_topic tu obtient ce que tu veux ?
select DISTINCT posts.id_topic from topic,posts where posts.pseudo_post ='mido' and topic.pseudotopic='mido' ORDER BY topic.date_mise_jour DESC, topic.time_mise_jour DESC, posts.date_post DESC, posts.time_post limit 0,10;
la j'ai simplifier, car si tu laisse le select du topics.id_topic tu va forcément avoir autant de fois chaque topic créer qu'il y a de commentaire du membre ;) (essai d'ajouter un topic a ton nom, perso j'ai modifié le 12 ^^ ).

dans ce cas le résultat est
+----------+
| id_topic |
+----------+
| 8 |
| 1 |
| 10 |
| 11 |
+----------+
4 rows in set (0.00 sec)
avec
select DISTINCT posts.id_topic as CommenttopicID, topic.id_topic as topicID from topic,posts where posts.pseudo_post ='mido' and topic.pseudotopic='mido' ORDER BY topic.date_mise_jour DESC, topic.time_mise_jour DESC, posts.date_post DESC, posts.time_post limit 0,10;
tu a un produit cartésien, donc même pas envisageable (la 8 lignes au lieux de 4)
+----------------+---------+
| CommenttopicID | topicID |
+----------------+---------+
| 8 | 12 |
| 1 | 12 |
| 10 | 12 |
| 11 | 12 |
| 8 | 11 |
| 1 | 11 |
| 10 | 11 |
| 11 | 11 |
+----------------+---------+
8 rows in set (0.00 sec)
j'ai essayé le group by, mais j'y arrive pas la, comme je l'ai dit je suis mauvais en SQL :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

03 août 2011, 19:15

merci moogli ça répond a ma question :)

vraiment désolé pour le dérangement :)

PS: pour la question de langue français de france ^^ je suis qu'un étudiant italien en france c'est ma première année c'est déja pas mal mon niveau non ? :D
au pire on peut discuter en italienne ^^ si ça te dérange pas :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 août 2011, 19:54

heu pasta ? :mrgreen:

nan mais, c'que je voulais dire c'est d'expliquer avec des mots simples. suivant le vieille adage : ce qui s'explique bien, ce conçoit bien ;)
et comme on est pas dans ta tête on peux pas tous deviner :)

donc un bon énoncé, même pas en français académique juste compréhensible c'est bon :)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

04 août 2011, 00:28

heu pasta ? :mrgreen:

nan mais, c'que je voulais dire c'est d'expliquer avec des mots simples. suivant le vieille adage : ce qui s'explique bien, ce conçoit bien ;)
et comme on est pas dans ta tête on peux pas tous deviner :)

donc un bon énoncé, même pas en français académique juste compréhensible c'est bon :)


@+
oui ^^ de tt façon merci moogli tt o long de mon stage tu étais là pour me répondre ^^ a vrai dire dans mon rapport de stage jvé mettre ton nom pas le mien ^^

Eléphant du PHP | 417 Messages

04 août 2011, 00:48

si non moogli j'ai encore une petite question ^^

la date

en fait qd j'affiche un msg ou un commentaire ... y a tjr une date et heur a affiché normal ...
donc moi je fait un test si cette date = la date de jour j'affiche Aujourd'hui Sinon si la date = a la date de jour - 1 j'affiche Hier si non j'affiche la date comme il est ex 2011-08-01

mais le problème si que ça marche pas pour HIER :s

voici le code qui fait ça
if (($datetime->date_msg) == (date("Y-m-d")))
							$dateMsg = 'Aujourd\'hui';
						elseif (($datetime->date_msg) == (date("Y").'-'.date("m").'-'.((date("d"))-1)))
							$dateMsg = 'Hier';
						else 
							$dateMsg = $datetime->date_msg;
Avec ce code si la date = a la date de jour ça maffiche bien Aujourd'hui mais hier non psk en fait le problème vien de ((date("d"))-1)))
normalement (date("d") affiche la date de jour de 01 à 31 donc mais quand je fait -1 au lieu de prendre la valeur 03 il pren 3 (sans le 0) ce qui fait quand je fait la comparaison entre 2011-08-04 et 2011-08-3 c'est pas du tt pareil

en fait ce problème si juste quand la date de jour et entre 01 et 10 mais quand si 11 par exemple le ((date("d"))-1) = 10 donc deux chiffre pas de problème

vous voyez mon problème ?

Edit c'est fait ^^ j'ai rajouté un petit if avant
	$hier= ((date("d"))-1);
						if ($hier>= 01 and $hier<= 10)
							$hier = '0'.(date("d")-1);
							
						if (($datetime->date_msg) == (date("Y-m-d")))
							$dateMsg = 'Aujourd\'hui';
						elseif (($datetime->date_msg) == (date("Y").'-'.date("m").'-'.$hier))
							$dateMsg = 'Hier';
						else 
							$dateMsg = $datetime->date_msg;
mais est ce que je peux mettre tous ça dans une function psk ce code est répété +++ fois dans mon code :( cé moche ^^ la seul chose qui change c'est $datetime->date_msg ??

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 août 2011, 04:59

si tu a déjà un objet datetime je te conseil la méthode diff qui va te retourner un objet te permettant de formater la sortie de la différence (donc par exemple avec juste "d" et vérifier que ce retour est correct ;)

sinon tu peux t'en inspirer :)

pour l'affichage si tu a un classe / fonction le gérant oui pourquoi pas, tu passe en paramètre la date et elle retourne, aujourd'hui, hier ou un truc par défaut.

par exemple
<?php
function compareDate( $date ) {
	$aujourdhui = new datetime();// initialise avec la valeur de l'instant pr�sent par d�faut
	$dateAtraiter = new datetime($date);// bon faudrait v�rifier que le format soit bien yyyy-mm-dd
	$interval = $aujourdhui->diff($dateAtraiter);
	$ecart = $interval->format('%R%a');
	switch ($ecart) {
        case 0: $ret = 'aujourd\'hui';
            break;
        case -1: $ret = 'hier';
            break;
        default : $ret = '????';// bon ben la tu met c'que tu veux ;)
    }
    unset($aujourdhui);
    unset($dateAtraiter);
    return $ret;
}
?>
a tester bien sur ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

04 août 2011, 19:43

ah merci alors c'est la première fois que je vais utilisé des méthode et des class ^^
donc j'ai fait un copie collé a ton code

j'ai ajouter deux ligne bien sur lol la ligne pour appelé la function avec une date que je veux tester et une ligne pour afficher résultat mais le problème si que résultat c'est que il connais pas la variable $ret
function compareDate( $date ) 
	{
		$aujourdhui = new datetime();// initialise avec la valeur de l'instant pr?sent par d?faut
		$dateAtraiter = new datetime($date);// bon faudrait v?rifier que le format soit bien yyyy-mm-dd
		$interval = $aujourdhui->diff($dateAtraiter);
		$ecart = $interval->format('%R%a');
		switch ($ecart)
		{
			case 0: $ret = 'aujourd\'hui';
				break;
			case -1: $ret = 'hier';
				break;
			default : $ret = $date;// bon ben la tu met c'que tu veux <img src="./images/smilies/icon_wink.gif" alt=";)" title="Wink" />
		}
		unset($aujourdhui);
		unset($dateAtraiter);
		return $ret;
	}
compareDate($resultposts->date_post);

echo 'mon résultat est : '.$ret; 
Notice: Undefined variable: ret ligne ( echo 'mon résultat est : '.$ret; )