Salut
alors voila!!!!
Dans une base sql, j'ai 2 tables identiques en structure (je tenais a séparer les données au début et je me vois mal revoir toute ma prog)
Ces 2 tables ont un champ nb_vu (pour le nombre de fois vu)
et je cherche a faire un select sur ces 2 tables pour récupérer les entrés les plus vu!!!!
Vous avez pigé?
Utiliser les 2 tables comme si elles étaient dans la meme!!!
Mais bien les tables ne sont pas liés (dans table 1 j'ai les article de type 1 et dans table 2 ceux de type 2)
Je cherche donc a faire une requete du type
SELECT * FROM Table1,Table2 ORDER BY nb_vu LIMIT 0, 5;
et ca me donerais les articles les plus vu parmis les 2 tables
mais la requette ci dessu ne tourne pas!!!!
Je sais pas comment faire !!!!Et sql n'est pas mon fort!!!
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
je fait cour c la deuxieme fois que j'ecris le mess a cause d'un plantage.... grrrrr
3 solutions :
1- tu fait ton traitement en deux fois.... avec une fonction par exemple et tu retourne ta soluce
SELECT * FROM Table1 ORDER BY nb_vu LIMIT 0, 5;
query...
while(mysql_fetch_object($res)){
ta_fonction(tes_vars);
}
SELECT * FROM Table2 ORDER BY nb_vu LIMIT 0, 5;
query...
while(mysql_fetch_object($res)){
ta_fonction(tes_vars);
}
2- tu cree une table temporaire avec tes données et tu fait ton traitement sur cette table temporaire. ensuite tu detruit ou tu la vide comme ca a la reexecution pas de probleme (perso moi je creer o debut de ma page et je detruit une fois mon traitement terminer
3- je sais pas mais si tu trouve dit moi jai deja chercher et jai pas trouver de soluce... autre que ca (perso jai utiliser la deuxième)
et le traitement pour moi reste rapide et javai trois tables
j'espere que ca va t'aider
++
"Aucun de nous ne sait ce que nous savons tous, ensemble."
Lao Tseu inventeur du "copier coller" 8-)
Re!!!
je crois avoir trouvé la solution !!!
il faut utiliser UNION
ca donne :
(SELECT * FROM table1 ORDER BY nb_vu DESC LIMIT 5)UNION(SELECT * FROM table2 ORDER BY nb_vu DESC LIMIT 5)
...
UNION(SELECT * FROM tablex ORDER BY nb_vu DESC LIMIT 5)ORDER BY nb_vu DESC LIMIT 0,5;
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Finalement, c'est pas une bonne idée "UNION" car moi il me fallait connaître pour chaque résultat la table d'origine.
J'ai donc scanné chaque table et j'ai récupéré que les 5 premiers résultats que je classe dans un tableau sous la forme
$liste[$i]=(sprintf("%04d", $res['view']))."_".$res['id']."_".$table;
soit :
$liste[$i]="nb de fois vu (sur 4 chiffres)"_"id de l'enregistrement"_"table"
ensuite je classe mon tableau avec un simple
rsort($liste);
et j'affiche les 5 premiéres lignes de mon tableau ce qui me donne bien le top 5!!!
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Merci lol
Mais la 2e risque d'étre trés longue car j'ai environ 12 tables(pour chaque type d'article j'ai une table.)
. Avec 20 a 30 articles dans chaques (pour le moment alors que le site n'est pas référencé )
Je vais donc chercher une méthode 3 et si je trouve je te donnerais la solution!!! ;)
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
ma version de mysql ne prend pas les "union" j'avais deja tester mais jy ai pas repenser en écrivant ma réponse vu que ca marche pas chez moi :sad)
de plus jai le meme probleme que toi je doit connaitre ma table d'origine... jai donc mis dans ma table temporaire un autre champ indiquant la provenance...
Sinon ta solution en triant ta liste est pas mal mais pour moi ca compliquerai ma solution, jai 8 tri différents a faire sur ma table.... pour en ressortir différentes statistiques (en plus la ca marche :big) )
fodra que je pense a "rsort" le prochain coup ca pourrait considérablement simplifier des morceaux de codes
++
"Aucun de nous ne sait ce que nous savons tous, ensemble."
Lao Tseu inventeur du "copier coller" 8-)
Oui moi enfait j'au 3 types de tables. Avec pour chaque type environ 10 tables (vi je sais c'est pas le top mais bon!!!!)
et je n'ai que a récupérer les articles les plus vu pour chaque type et les nouveaux articles donc pas plus de 6 requettes * le nb de tables. C'est vrais que ca m'en fait 60 en tout a chaque chargement de la page index mais bon, visiblement ca pose pas de prob.
encore merci de ton aide ;)
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)