Trier un tableau + requete sur 2 tables

Trier un tableau + requete sur 2 tables - PHP - Programmation

Marsh Posté le 02-02-2005 à 15:16:41    

J'essaye de regrouper le reséultat de deux requetes SQL recherchant des éléments dans deux tables différentes dans un seul tableau . JE souhaite trier ce tableau par date (date étant un des champs)
 
Voici mon script actuel :  
 

Code :
  1. $date_rss=array("0" );$titre_rss=array("0" );$id_rss=array("0" );$cdz_rss=array("0" );
  2. $req1 = mysql_query("select * from news order by date desc limit 15" );
  3. $rank = 1;
  4. while($view1 = mysql_fetch_object($req1)) {
  5. $date = $view1->date;$titre = $view1->titre;$idx = $view1->idx;$cdz = 2;
  6. array_push ($date_rss, "$date" );
  7. array_push ($titre_rss, "$titre" );
  8. array_push ($id_rss, "$idx" );
  9. array_push ($cdz_rss, "$cdz" );
  10. $rank++;
  11. }
  12. $req2 = mysql_query("select * from contenu order by date desc limit 10" );
  13. while($view2 = mysql_fetch_object($req1)) {
  14. $date = $view2->date;$titre = $view2->titre;$idx = $view2->idx;$cdz = $view2->cdz;
  15. array_push ($date_rss, "$date" );
  16. array_push ($titre_rss, "$titre" );
  17. array_push ($id_rss, "$idx" );
  18. array_push ($cdz_rss, "$cdz" );
  19. $rank++;
  20. }
  21. asort($date_rss);
  22. for ($i = 0; $i !=11; $i++)
  23. {
  24. ?>
  25. <a href="index-<? echo $cdz_rss[$i] ?>-<? echo $id_rss[$i] ?>-0.html"><? echo $titre_rss[$i] ?></a> - le <? echo $date_rss[$i] ?><br/>
  26. <?
  27. }
  28. ?>


 
En vous remerciant de vos conseils et idées,


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 02-02-2005 à 15:16:41   

Reply

Marsh Posté le 02-02-2005 à 15:20:36    

J'ai du mal à saisir ... il y a les mêmes champs dans les 2 tables ?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-02-2005 à 15:20:40    

pq tu ne fais pas une seule requetes plutot si c'est sur une meme tables?
 
sinon difficile de trier sur un format de date sauf si date en format unix.

Reply

Marsh Posté le 02-02-2005 à 15:24:43    

ce sotn deux tables differentes et les dates sont bien en unix.


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 02-02-2005 à 15:35:24    

Ex-floodeur a écrit :

ce sotn deux tables differentes et les dates sont bien en unix.


va voir par la  :) http://lu.php.net/manual/fr/functi [...] tisort.php
 
puis fai moi le plaisir de changer ton

Citation :

for ($i = 0; $i !=11; $i++)


par

Citation :

for ($i = 0; $i <11; $i++)
ou
for ($i = 0; $i <count($date_rss); $i++)


c'est plus propre :love:


Message édité par zentakk le 02-02-2005 à 15:43:50
Reply

Marsh Posté le 02-02-2005 à 15:45:27    

merci !!
 
je devais mettre ca : array_multisort ($date_rss, SORT_DESC,$titre_rss, $id_rss,$cdz_rss);


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 02-02-2005 à 16:45:42    

Salut
 
Quelle version de MySQL ?

Reply

Marsh Posté le 02-02-2005 à 16:55:24    

Si c'est une version inférieure à la 4 voici ma proposition :

Code :
  1. <?php
  2. $rssList = array();
  3. $req1 = mysql_query("SELECT date, titre, idx, 2 AS cdz FROM news ORDER BY date DESC LIMIT 15" );
  4. $rank = 1;
  5. while($view1 = mysql_fetch_assoc($req1)) {
  6. $rssList[] = $view1;
  7. $rank++;
  8. }
  9. $req2 = mysql_query("SELECT date, titre, idx, cdz FROM contenu ORDER BY date DESC LIMIT 10" );
  10. while($view2 = mysql_fetch_assoc($req1)) {
  11. $rssList[] = $view2;
  12. $rank++;
  13. }
  14. function sortByDateAsc($a, $b) {
  15. if($a['date']==$b['date']) {
  16.  return 0;
  17. }
  18. return $a['date']>$b['date'] ? 1 : -1;
  19. }
  20. usort($rssList, 'sortByDateAsc');
  21. foreach($rssList as $rss) {
  22. ?>
  23. <a href="index-<?php echo $rss['cdz'] ?>-<?php echo $rss['idx'] ?>-0.html"><?php echo $rss['titre'] ?></a> - le <?php echo $rss['date'] ?><br/>
  24. <?php
  25. }
  26. ?>


Message édité par ratibus le 02-02-2005 à 16:56:56
Reply

Marsh Posté le 02-02-2005 à 17:02:31    

Et si tu as au moins MySQL 4 :

Code :
  1. <?php
  2. $rssList = array();
  3. $req = mysql_query("(SELECT date, titre, idx, 2 AS cdz FROM news ORDER BY date DESC LIMIT 15)
  4.     UNION
  5.     (SELECT date, titre, idx, cdz FROM contenu ORDER BY date DESC LIMIT 10)
  6.     ORDER BY date" );
  7. $rank = 1;
  8. while($view = mysql_fetch_assoc($req)) {
  9. $rssList[] = $view;
  10. $rank++;
  11. }
  12. foreach($rssList as $rss) {
  13. ?>
  14. <a href="index-<?php echo $rss['cdz'] ?>-<?php echo $rss['idx'] ?>-0.html"><?php echo $rss['titre'] ?></a> - le <?php echo $rss['date'] ?><br/>
  15. <?php
  16. }
  17. ?>


 
Si tu as des questions n'hésite pas ;)

Reply

Marsh Posté le 02-02-2005 à 17:39:44    

Merci de l'astuce ;)


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 02-02-2005 à 17:39:44   

Reply

Marsh Posté le 02-02-2005 à 18:08:56    

Le fait d'avoir qu'un tableau au lieu de 4 ou bien le [] ?

Reply

Marsh Posté le 02-02-2005 à 18:50:36    

non pour ton script :)
 
Enfin, si je pouvais juste avoir les 10 premières lignes ce serait le top !


---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 08-02-2005 à 03:06:27    

zentakk a écrit :

va voir par la  :) http://lu.php.net/manual/fr/functi [...] tisort.php
 
puis fai moi le plaisir de changer ton

Citation :

for ($i = 0; $i !=11; $i++)


par

Citation :

for ($i = 0; $i <11; $i++)
ou
for ($i = 0; $i <count($date_rss); $i++)


c'est plus propre :love:

Moi c'est plutot ça qui me choque :

Code :
  1. ?>
  2. <a href="index-<? echo $cdz_rss[$i] ?>-<? echo $id_rss[$i] ?>-0.html"><? echo $titre_rss[$i] ?></a> - le <? echo $date_rss[$i] ?><br/>
  3. <?


Fait plutot :

Code :
  1. echo '<a href="index-'.$cdz_rss[$i].$id_rss[$i].'-0.html">'.$titre_rss[$i].'</a> - le '.$date_rss[$i]."<br/>\n";


Reply

Marsh Posté le 04-03-2005 à 14:06:11    

ca changerait quoi ?  En quoi ca te choque ?

Reply

Marsh Posté le 05-03-2005 à 01:20:18    

En gros tu fait :
[fin de code PHP]
[code HTML]
[début de code PHP]
[afficher variable]
[fin de code PHP]
[code HTML]
[début de code PHP]
[afficher variable]
[fin de code PHP]
...etc !
 
Alors que dans ce que je dis de faire, tu fais juste :
[afficher une chaîne de caractères]

Reply

Marsh Posté le 05-03-2005 à 10:23:09    

oui mais c'est plus clair non ? ou alors, il faudrait faire tout le PHP d'abord, puis la sauce HTML ?


Message édité par Ex-Floodeur le 05-03-2005 à 10:23:31

---------------
Saint Seiya  || La Livebox || Europe, débats, réflexions
Reply

Marsh Posté le 05-03-2005 à 15:30:33    

C'est toujours plus clair de faire une seule instruction de sortie de chaîne de caractère que de faire 15 mélanges entre code html non interprété et affichage de caractère en php.
D'une certaine manière, ça serait comme avoir la liste des directions à prendre pour aller de tel endroit à tel autre en ayant comme indication "avancez tout droit de 15 mètres puis avancer tout droit sur 50 mètres puis ..."
Mieux vaut un simple "avancez tout droit sur 625 mètres" s'il y a aucun carrefour sur le chemin. ;)


Message édité par omega2 le 05-03-2005 à 15:32:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed