[resolu]tableau PHP et dedoublonnement sur un champ

WRInaute accro
Bonsoir

Voilà, j'ai un code comme celà :

Code:
	$q1="SELECT * FROM messages WHERE `div`=1 ORDER BY date DESC, heure DESC LIMIT 30";
	$r1=mysql_query($q1);
	$i=0;
	$tab=array();
	while ($row = mysql_fetch_array($r1))
	{
	$tab[$i][1]=$row['id_message'];
	$tab[$i][2]=$row['id_rep'];
	$tab[$i][3]=$row['sujet'];
	$i++;
	}

Je souhaite pouvoir dédoublonner mon tableau $tab sur la clé 2 SAUF si $tab[$i][2]==0. Et que l'enregistrement "gardé" soit celui qui soit le plus récent (grace au champ date et heure) (j'ai fait une version simplifiée, mon tableau ira en fait jusqu'à $tab[$i][13] environ)

Je sèche graaaaave. Une bonne ame svp charitable pour m'aider peut etre ??? Merci à ceux qui pourront m'aider ...

J'utilise actuellement une requete SQL pour le faire, assez complexe mais surtout avec un temps de résolution trop long. D'ou ma question pour voir si le PHP peut m'aider à faire celà plus vite ...

Merci d'avance à ceux qui prendront ne serait ce que le temps de lire ...
 
WRInaute occasionnel
Fait plutot un GROUP BY id_rep dans ta requete SQL.

En pratique SQL est tjs plus rapide que php.

(SELECT * FROM messages WHERE `div`=1 and id_rep=0 ORDER BY date DESC, heure DESC LIMIT 30)
UNION
(SELECT * FROM messages WHERE `div`=1 and id_rep<>0 GROUP BY id_rep ORDER BY date DESC, heure DESC LIMIT 30)
 
WRInaute accro
php aura du mal a faire mieux...

quand j'ai des requetes avec des temps d'executions trop long , je m'arrange pour qu'elles soient executées par tache cron avec un script externe, et je met les resultats de la requete dans une autre table et ma requete devient toute legere...

hs:
depuis que les hebergeurs ont integrés les crons ou planificateurs de taches dans leur offres ( avec sur certain serveurs, ce sont 100% des taches executées, alors qu'avec "webcron" par ex, ce sont 10% des taches executées)
je trouve que les crons sont une alternative interressante pour econominer de la BP et qu'il serait dommage de s'en priver.
 
WRInaute accro
theJB a dit:
Fait plutot un GROUP BY id_rep dans ta requete SQL.

Yep, mon module tourne actuellement avec une requete imbriquée avec group by et un union, un peu sous la forme de ce que tu indiques, mais en plus complexe, car ce dont j'ai besoin dans la seconde partie de la requete est que l'enregistrement restant après dédoublonnage du champ id_rep soit le plus récent, ce qui n'est pas le cas.

La requete que j'utilise me fait obtenir exactement ce que je veux, mais avec un délai d'exécution de plusieurs secondes, ce qui me gène considérablement ... pour l'instant j'ai un systeme de cache de 10mn (ce sont des messages de forum, je dois les rafraîchir régulièrement) sur ces modules qui limite la casse, mais bon si j'avais pu avoir un module très réactif et léger à charger, ça aurait fait mon bonheur ! :)
 
WRInaute accro
Résolu. bon j'ai finalement réussi à me dépatouiller avec des tableaux PHP pour obtenir ce que je veux, et ça va beaucoup plus vite que la requete SQL que j'utilisais.Voilà, je tenais à le dire :)
 
Discussions similaires
Haut