Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Une autre question, toujours dans la class Forum

Pour le marquage de messages lus cette fois ci..
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1548
  • Inscrit : 28 Septembre 2006
Message édité 4 fois, dernière édition par Talus, 01 Janvier 2008, 2:10     Lien vers ce message 31 Décembre 2007, 20:13
Yo,

Y'a un truc qui me titille, pour les requêtes de la fin. Va que si les multiinsertions sont actvées par le SGBD, les requqtes d'insertion dont faites à la fin (et non bouclées), mais je comprends pas l'interet de préférer un update plutot qu'un replace ?

En gros, la condition, au lieu de vérifier si $row['tr_last_time'] est nul, alors faire une insertion, sinon un update, pourquoi ne pas vérifier si celui-ci est nul (donc renvoi false) OU si le temps est pas correct, puis faire un replace dessus ?

Ca eviterais, je pense, si les multi insertions sont activées, de devoir faire plusieurs requêtes d'insertions (ou de majs) plutot que plusieurs update et une insertion multiple....

Je dis peut-être des conneries, mais j'aimerais bien avoir ma lanterne éclairée ^^

EDIT > Si on passe par un replace, alors la condition pour voir si c'est soit nul soit plus petit que la date du dernier post devient également inutile, puisque testée dans la requete SQL...

En gros, on passerais de ceci:
// On met à jour la table fsb2_topics_read
		$result = $select->execute();
		while ($row = Fsb::$db->row($result))
		{
			if (!$row['tr_last_time'])
			{
				Fsb::$db->insert('topics_read', array(
					'u_id' =>			Fsb::$session->id(),
					't_id' =>			$row['t_id'],
					'p_id' =>			$row['t_last_p_id'],
					'tr_last_time' =>	$row['t_last_p_time'],
				), 'INSERT', TRUE);
			}
			else if ($row['tr_last_time'] < $row['t_last_p_time'])
			{
				Fsb::$db->update('topics_read', array(
					'tr_last_time' =>		$row['t_last_p_time'],
					'p_id' =>				$row['t_last_p_id'],
				), 'WHERE u_id = ' . Fsb::$session->id() . ' AND t_id = ' . $row['t_id']);
			}
		}
		Fsb::$db->free($result);


à cela :
// On met à jour la table fsb2_topics_read
		$result = $select->execute();
		while ($row = Fsb::$db->row($result))
		{
			Fsb::$db->insert('topics_read', array(
				'u_id' =>			Fsb::$session->id(),
				't_id' =>			$row['t_id'],
				'p_id' =>			$row['t_last_p_id'],
				'tr_last_time' =>	$row['t_last_p_time'],
			), 'REPLACE', TRUE);
		}
		Fsb::$db->free($result);


(etc), puisque ici, les deux champs en question seront soit mis à jour par REPLACE, soit inséré par la même commande. Et puis si il y a pas replace, ca fera bien une update ou une insertion... ?

Non ?


 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1548
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 03 Janvier 2008, 15:44
Oyo ?


 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14507
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 03 Janvier 2008, 16:32
Je répondrai quand j'aurai le temps de regarder en détail.


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1548
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 03 Janvier 2008, 16:56
'Kay. Je voulais juste être sur que tu l'avais lu, si c'etait pas tombé dans les oubliettes ^^'


 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14507
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 07 Janvier 2008, 22:31
Voilà c'est corrigé pour la prochaine version.


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Répondre


.