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:
$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 :
$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 ?