• User Attivo

    MySql ordinare per data da più tabella

    Ciao a tutti
    Ho bisogno di fare una pagina che mostri in ordine cronologico i dati derivanti da diverse tabelle. Tabelle che possono essere commenti, foto, video ecc.

    Un po come la bacheca di facebook che mostra foto video, link ecc per ordine di inserimento.

    In tutte le mie tabelle ho un campo timestamp che indica quando è stato inserito il dato.

    Il mio problema è che ho bisogno di avere i dati ordinati per data ma anche di sapere cosa sono e da quale tabella arrivano, perche se sono testo lo scrivo con echo, se immagine devo inserire il tag <img... >, se video il codice di incorporamento di youtube, ecc

    Ho pensato alle query join, ma la mia mi sa non essere proprio un unione, o bisogno dell'ordine ma anche della provenienza e temo le join non me la lascino ricavare. Inoltre per ora le tabelle son 3 ma potrebbero diventare 5-10-20 e la join diventerebbe un casino ingestibile...

    Ho pensato a qualche tipo di array che salva date provenienza e id ma i dati verrebber
    o comunque ricavati dalle singole tabelle una alla volta e non so se poi posso ordinare i dati delle date nell'array, con l'array potrei però conoscendo la provenienza e id reinserire una query che ricava il singolo dato e inserire il relativo codice di output.

    Esiste un sistema più semplice e affidabile per fare qualcosa del genere?

    Grazie
    Ciao


  • User Attivo

    Per la cronaca... son poi riuscito, ma ragionando al contrario...

    Son partito dalla data, ho fatto un ciclo for al cui interno ho fatto delle query che cercano nelle varie tabelle la data più vicina ad mktime(). Successivamente verifico in quale tabella ho trovato la data piu vicina, cosi so in quale tabella era e ho gia anche tutti i dati per preparare l'output. A fine ciclo aggiorno aggiorno la variabile in cui avevo messo mktime con l'ultima data trovata, e tutto riparte per trovare il prossimo record.

    Qualcosa di simile a questo

    
    <?
    $aggiorna_data = mktime();
    
    
    for ($i = 1; $i <= 20; $i++) {
    
    
    //bacheca
    $result_bacheca = $db->query("SELECT * FROM ".$db->prefix("bacheca")." WHERE data_ins<'".$aggiorna_data."' ORDER BY data_ins DESC LIMIT 1");
    	$row_bacheca = mysql_fetch_array($result_bacheca);
    	
    //foto
    $result_foto = $db->query("SELECT * FROM ".$db->prefix("foto")." WHERE data_ins<'".$aggiorna_data."' ORDER BY data_ins DESC LIMIT 1");
    	$row_foto = mysql_fetch_array($result_foto);
    	
    //video
    $result_video = $db->query("SELECT * FROM ".$db->prefix("video")." WHERE data_ins<'".$aggiorna_data."' ORDER BY data_ins DESC LIMIT 1");
    	$row_video = mysql_fetch_array($result_video);
    
    
    if($row_bacheca['data_ins'] > $row_foto['data_ins'] && $row_bacheca['data_ins'] > $row_video['data_ins']){
    	//bacheca
    	?>
    Output
    <?
    	$aggiorna_data = $row_bacheca['data_ins'];
    	
    }elseif($row_foto['data_ins'] > $row_bacheca['data_ins'] && $row_foto['data_ins'] > $row_video['data_ins']){
    	//foto
    	?>
    Output
    <?
    	$aggiorna_data = $row_foto_animali['data_ins'];
    	
    }elseif($row_video['data_ins'] > $row_bacheca['data_ins'] && $row_video['data_ins'] > $row_foto['data_ins']){
    	//video
    	?>
    Output
    <?
    	$aggiorna_data = $row_video['data_ins'];
    }
    
    
    
    
    }//chiudo for
    ?>
    
    

    Ciao


  • Moderatore

    Potresti fare una union ALL così da sapere anche da dove deriva il dato. 😉 sveltiresti la cosa ed avresti un codice più pulito.