Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234

    Query multi table per slideshow

    Ciao a tutti,
    vorrei inserire all'interno di uno slideshow dei dati (immagini, titolo ecc..) che provengano da 2 diverse tabelle ed ordinarle per data di inserimento..
    Mi spiego meglio..ho due tabelle nominate news e eventi
    al loro interno ho:

    news: idn | titn | imgn | datan | slide

    eventi: ide | tite | imge | datae | slide

    Il concetto è che tutti i records che hanno il campo slide = s si devono inserire nello slideshow

    Ora, se volessi fare la query solo su news non ho problemi e la posto qua sotto:
    Codice PHP:
    <?php
        $x 
    0;
        
    $quern "SELECT * FROM news WHERE slide = 's' ORDER BY datan LIMIT 5";
        
    $resn MYSQL_QUERY($quern);
        
    $x++;
        while (
    $rown mysql_fetch_object($resn)) :
            
    $tit $rown->titn;
            if (
    strlen(strip_tags($tit)) > 23) :
                
    $titolo substr(strip_tags($tit), 023)."...";
            else :
                
    $titolo strip_tags($tit);
                endif;                                
    ?>
    <a href="news.php?idn=<?php print $rown->idn?>">
        [img]img/news/<?php print $rown->imgn?>[/img]" alt="<?php print $titolo?>" />
    </a>
    <?php endwhile;    ?>
    il problema è inserire al suo interno i record presenti nella tabella eventi anch'essi con campo slide = s

    e poi come fare ad ordinarli quando hanno il campo data nominato diverso da quello della tabella news?

    Spero possiate aiutarmi.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di homerbit
    Registrato dal
    Dec 2005
    residenza
    Roma
    Messaggi
    1,380
    devi eseguire una "Join" (cerca sul web mysql query join) con un where (slide = s) AND (datan = datae)
    If you think your users are idiots, only idiots will use it. DropBox

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    Eccomi di ritorno..
    avevo accantonato il problema..
    ricapitolo qua:
    vorrei inserire all'interno di uno slideshow dei dati (immagini, titolo ecc..) che provengano da 2 diverse tabelle ed ordinarle per data di inserimento..
    tutti i records che hanno il campo slide = s si devono inserire nello slideshow

    Le due tabelle news e eventi al loro interno hanno:

    news: idn | titn | imgn | datan | slide

    eventi: ide | tite | imge | datae | slide

    inoltre se viene inserito un record proveniente da news il link alll'mmagine deve puntare a news.php?id=<?php print $rown->idn; ?> al contrario se proviene da eventi a eventi.php?id=<?php print $rown->ide; ?>

    ho provato così ma senza riuscirci..

    Codice PHP:
    $quern "SELECT n.idn, n.datan, n.imgn, n.titn, n.tite, n.slide, n.onl, e.ide, e.datae, e.imge, e.slide, e.onl
    FROM news AS n
    INNER JOIN events AS e ON e.datae = n.datan
    WHERE n.slide = 's' and n.onl = 's' and e.slide = 's' and e.onl = 's'
    ORDER BY n.data desc LIMIT 5"


  4. #4
    Utente di HTML.it L'avatar di homerbit
    Registrato dal
    Dec 2005
    residenza
    Roma
    Messaggi
    1,380
    ti ritorna un errore o cosa?
    nella struttura delle tamble non vedo la colonna onl che richiami nella query (ma forse l'avrai omesso solo quì)
    prova ad inserire la riga var_dump($quern);
    e posta il risultato
    If you think your users are idiots, only idiots will use it. DropBox

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    Ciao Homerbit, si onl lo avevo omesso solo qua...

    mi esce
    Codice PHP:
    string(269"SELECT n.idnw, n.datan, n.foto1, n.titni, n.titne, n.slide, n.onl, e.idev, e.dataev, e.fotoev, e.slide, e.onl
    FROM news AS n
    INNER JOIN events AS e ON e.dataev = n.datan
    WHERE n.slide = 's' and n.onl = 's' and e.slide = 's' and e.onl = 's'
    ORDER BY n.datan desc LIMIT 5" 
    Il codice completo è questo
    Codice PHP:
    <?php
        $x 
    0;
        
    $quern "SELECT n.idn, n.datan, n.imgn, n.titn, n.tite, n.slide, n.onl, e.ide, e.datae, e.imge, e.slide, e.onl
        FROM news AS n
        INNER JOIN events AS e ON e.datae = n.datan
        WHERE n.slide = 's' and n.onl = 's' and e.slide = 's' and e.onl = 's'
        ORDER BY n.data desc LIMIT 5"
    ;
        
        
    $resn MYSQL_QUERY($quern);
        
    $x++;
        while (
    $rown mysql_fetch_object($resn)) :
            
    $tit $rown->titn;
            if (
    strlen(strip_tags($tit)) > 23) :
                
    $titolo substr(strip_tags($tit), 023)."...";
            else :
                
    $titolo strip_tags($tit);
                endif;                                
    ?>
    <a href="news.php?idn=<?php print $rown->idn?>">
        [img]img/news/<?php print $rown->imgn?>[/img]" alt="<?php print $titolo?>" />
    </a>
    <?php endwhile; ?>
    come dicevo non mi restituisce niente..a parte il fatto che in questo modo mi restituirebbe solo 5 immagini news e non eventi..
    io invece voglio che le immagini vengano pescate da entrambe le tabelle..
    tra le news e tra gli eventi con campo slide e onl = s, ordinate sul join dei campi datan e datae e che puntino alle rispettive pagine come in questo esempio

    codice:
    <a href="news.php?idn=<?php print $rown->idn; ?>">
        [img]img/news/<?php print $rown->imgn; ?>[/img]" alt="<?php print $titolo; ?>" />
    </a>
    <a href="eventi.php?ide=<?php print $rown->ide; ?>">
        [img]img/eventi/<?php print $rown->imge; ?>[/img]" alt="<?php print $titolo; ?>" />
    </a>
    <a href="news.php?idn=<?php print $rown->idn; ?>">
        [img]img/news/<?php print $rown->imgn; ?>[/img]" alt="<?php print $titolo; ?>" />
    </a>
    <a href="eventi.php?ide=<?php print $rown->ide; ?>">
        [img]img/eventi/<?php print $rown->imge; ?>[/img]" alt="<?php print $titolo; ?>" />
    </a>
    <a href="news.php?idn=<?php print $rown->idn; ?>">
        [img]img/news/<?php print $rown->imgn; ?>[/img]" alt="<?php print $titolo; ?>" />
    </a>

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    prova con questa query, visto che il numero di campi è lo stesso (spero non ci siano errori ):

    Codice PHP:
    SELECT events.ide AS idevents.tite AS titleevents.imge AS img,  events.datae AS dataevents.slide AS slide'event' AS type
    FROM events WHERE slide
    ='s' 
    UNION SELECT news.idn AS idnews.titn AS titlenews.imgn AS imgnews.datan AS data,
    news.slide AS slide'news' AS type
    FROM news WHERE slide
    ='s' 
    ORDER BY data 

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    Ciao Boots!
    Funziona..grazie!!!
    Ho aggiunto alla query events.onl AS online, e news.onl AS online,
    e poi nel where: FROM events WHERE slide='s' AND online='s'
    e FROM news WHERE slide='s' AND online='s'

    ma così mi da errore:
    mysql_fetch_object(): supplied argument is not a valid MySQL result resource


    Come faccio poi a cambiare il percorso dell'immagine in base alla provenienza? News o eventi?

    Un altra domanda.. vorrei che events.tite AS title fosse composto da titolo e sottotitolo
    scritto in queto modo "tite - stite"

    Grazie

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Se posti la query, magari si capisce meglio deve sta l'errore. A parole mi sembra corretto.
    Ricordati che con la UNION le due select devono avere lo stesso numero di campi.

    Per distinguere news da eventi avevo aggiunto il campo 'type'. Basta che fai un if.

    il sottotitolo è sempre un campo della tabella? se si puoi modificare la select:

    Codice PHP:
    SELECT events.ide AS idCONCAT(events.tite' - ',  events.stite) AS title,  ... 
    Ricordati sempre che il numero di campi selezionato deve essere lo stesso nelle due select

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    Ottimo..ho capito..
    ho settato i percorsi delle immagini e dei link in modo da pescarli in automatico nel ciclo..

    ho messo inoltre titita e titeng per differenziarlo nel while..
    per eventi uguale sia in ita che eng
    mentre per news avendo nel db anche il campo titne ho fatto così:
    Codice PHP:
    $quern "SELECT events.ide AS id, CONCAT(events.tite, ' - ',  events.stite) AS titita, CONCAT(events.tite, ' - ',  events.stite) AS titeng, events.imge AS img, events.datae AS data, events.slide AS slide, events.onl AS online, 'public/eventi' AS urlimg, 'events/event' AS urllink
    FROM events WHERE slide='s' AND online='s'
    UNION SELECT news.idn AS id, news.titni AS titita, news.titne AS titeng, news.imgn AS img, news.datan AS data, news.slide AS slide, news.onl AS online, 'public/news' AS urlimg, 'news/details' AS urllink
    FROM news WHERE slide='s' AND online='s'
    ORDER BY data desc LIMIT 5"

    l'unico errore è sul WHERE AND online='s'
    se lo levo funziona..ma il filtro lo vorrei anche sullo stato online="s"

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.