Page 1 sur 1

Afficher par ordre croissant données de 3 tables

Posté : 27 oct. 2009, 11:26
par bobi
Bonjour,

J'ai actuellement 3 tables différentes qui n'ont aucun rapport les unes avec les autres. De ces 3 tables, je voudrais récupérer chaque dernier enregistrement et les afficher sur une page par ordre croissant. Je ne vois pas trop comment m'y prendre étant qu'il s'agit de 3 tables différentes avec 3 requêtes différentes.

Par exemple : T1 - T2 et T3 pour mes 3 tables. E1 - E2 et E3 pour les 3 derniers enregistrement de chaque table.

le 27/10 j'ai une nouvelle donnée sur T1
le 28/10 une nouvelle sur T3
le 29 une nouvelle sur T2.

Comment afficher :
1. E2
2. E3
3. E1

Merci pour votre aide

Re: Afficher par ordre croissant données de 3 tables

Posté : 27 oct. 2009, 11:38
par ouckileou
Si tu utilises MySQL tu peux utiliser LIMIT pour récupérer la dernière ligne de chaque table (résultats triés par ordre chronologique décroissant, tu prends le premier)

Ensuite, tu peux trier ces 3 lignes via PHP. Si tu mets ces lignes dans un tableau, tu peux transformer la date en timestamp UNIX par exemple, avec mktime, et trier sur cet entier.

3 petites requêtes simples et un petit tri rapide par PHP sont à mon avis meilleures qu'une seule grosse requête compliquée, mais tu pourrais aussi concaténer le résultat des 3 requêtes avec UNION et rajouter un tri sur cette requête globale.

Re: Afficher par ordre croissant données de 3 tables

Posté : 28 oct. 2009, 10:19
par bobi
Merci pour ton aide ouckileou ;)

Alors j'ai réussi à intégrer dans mon tableau les informations provenant de 2 requêtes.
$sql=mysql_query("SELECT id,email,date_insc FROM tab1 ORDER BY id DESC LIMIT 0,1");
$rs = mysql_fetch_object ( $sql );

$sql1=mysql_query("SELECT id,auteur,date FROM tab2 ORDER BY id DESC LIMIT 0,1");
$rs1 = mysql_fetch_object ( $sql1 );

$data[] = $rs->id;
$data[] = $rs->email;
$data[] = $rs->date_insc;
$data[] = $rs1->id;
$data[] = $rs1->auteur;
$data[] = $rs1->date;

print_r($data);
J'ai regardé la doc pour le tri, mais je ne vois pas du comment trier à partir de la date, ici à savoir vérifier date_insc et date :|

Merci !

Re: Afficher par ordre croissant données de 3 tables

Posté : 28 oct. 2009, 11:33
par edison1986
Bonjour,

En imaginant que ta date soit enregistrée au format timestamp dans ta base tu dois faire un truc du genre :
<?php
    $data = array();
    
    $sql=mysql_query("SELECT id,email,date_insc FROM tab1 ORDER BY id DESC LIMIT 0,1");
    $rs = mysql_fetch_object ( $sql );

    $sql1=mysql_query("SELECT id,auteur,date FROM tab2 ORDER BY id DESC LIMIT 0,1");
    $rs1 = mysql_fetch_object ( $sql1 );

    $data[$rs->date_insc][] = array("id" => $rs->id, "email" => $rs->email);
    $data[$rs1->date][] = array("id" => $rs1->id, "email" => $rs1->auteur);

    ksort($data);
    
    print_r($data);
?>
Si les dates ne sont pas enregistrées au format timestamp il te suffit de les transformer avec un petit "mktime();".

Re: Afficher par ordre croissant données de 3 tables

Posté : 29 oct. 2009, 10:10
par bobi
Merci beaucoup !

J'arrive maintenant à afficher toutes les données et à les trier selon la date. Le hic c'est que je voudrais sélectionner des champs précis et afficher des choses différentes selon chaque table.
$sql=mysql_query("SELECT id,intitule,url,date_insc,quoineuf FROM tab1 ORDER BY id DESC LIMIT 0,1");
$rs = mysql_fetch_object ( $sql );

$sql1=mysql_query("SELECT id,auteur,objectif,date,quoineuf FROM tab2 ORDER BY id DESC LIMIT 0,1");
$rs1 = mysql_fetch_object ( $sql1 );

$sql2=mysql_query("SELECT id_video,titre,auteur,date_ajout,quoineuf FROM tab3 ORDER BY id_video DESC LIMIT 0,1");
$rs2 = mysql_fetch_object ( $sql2 );

$data[strtotime($rs->date_insc)][$rs->quoineuf][] = array("id" => $rs->id, "intitule" => $rs->url, "url" => $rs->url, "date_insc" => date("d.m.Y",strtotime($rs->date_insc)));

$data[strtotime($rs1->date)][$rs1->quoineuf][] = array("id" => $rs1->id, "objectif" => $rs1->objectif, "auteur" => $rs2->auteur, "date" => date("d.m.Y",strtotime($rs1->date)));

$data[$rs2->date_ajout][$rs2->quoineuf][] = array("id_video" => $rs2->id_video, "titre" => $rs2->titre, "auteur" => $rs2->auteur, "date_ajout" => date("d.m.Y",$rs2->date_ajout));

ksort($data);
//print_r($data);

foreach($data as $keyLevel_1 => $dataLevel_1) 
{
    foreach($dataLevel_1 as  $keyLevel_2 => $dataLevel_2)
    {
	print "<strong>".$keyLevel_2."</strong><br />";
	 foreach($dataLevel_2 as  $keyLevel_3 => $dataLevel_3)
        {
		foreach($dataLevel_3 as  $keyLevel_4 => $dataLevel_4)
	        {
				print "$keyLevel_4 : ".$dataLevel_4;
	        }
		echo '<br />';
        }
    }
}
Là j'affiche tout avec print "$keyLevel_4 : ".$dataLevel_4;. Y a t-il un moyen de voir de quelle table provient chaque donnée et faire un affichage en conséquence ?

Par exemple au lieu de faire un print comme ça, peut-on faire :

Si ces données viennent de tab 1 alors afficher les champs qu'on veut de tab1.
Si ces données viennent de tab 2 alors afficher les champs qu'on veut de tab2.
Si ces données viennent de tab 3 alors afficher les champs qu'on veut de tab3.

Merci !