Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [mysql] unire due query

    Mi trovo di fornte a un problema con la costruzione di una query: il punto di partenza sono due tabelle, articoli e immagini, che sono unite correlate da un comune campo id_articolo: ad ogni articolo possono essere associate da zero a infinite immagini.
    Devo estrarre con una sola query ( per dei validi motivi) solo gli articoli con più di una immagine.
    Uso correntemente LEFT JOIN per unire tra più tabelle (anche 3 o 4), ma in questo caso non riesco, vi posto il mio sql non corretto:

    Codice PHP:
    SELECT DISTINCT articoli.id_articolo AS id_articoloarticoli.titolo AS titoloarticoli.data AS 
    dataimmagini.id_articolo AS id_articolo2immagini.file AS fileimmagini.alt AS alt FROM 
    immagini LEFT JOIN articoli on articoli
    .id_articolo immagini.id_articolo 
    WHERE articoli
    .visibile=AND COUNT(immagini.id_immagine)>1 ORDER BY articoli.data 
    qualche indicazione?
    sicuramente sbaglio nell'uso di COUNT, senza considerare che forse mi serve pure un GROUP BY...

  2. #2
    l'unica cosa funzionante che riesco a fare è con due query, ma in questo modo o rinuncio alla paginazione dei risultati o mi toccherebbe scrivere uno script ad hoc che vorrei evitare per problemi di tempo.

    prima query:
    Codice PHP:
    $queryuno mysql_query("SELECT DISTINCT articoli.id_articolo AS id_articolo, articoli.titolo AS titolo, articoli.data AS data,
     immagini.id_articolo AS id_articolo2, immagini.file AS file, immagini.alt AS alt FROM articoli LEFT JOIN immagini on articoli.id_articolo = immagini.id_articolo
    WHERE articoli.visibile=1 ORDER BY articoli.data"
    );
    while (
    $row mysql_fetch_array($result)) {
    $id_articolo $row['id_articolo'];
    // etc
    // seconda query

    seconda query:
    Codice PHP:
    $querydue mysql_query("SELECT COUNT(id_immagine) FROM immagini WHERE id_articolo='".$id_articolo."'");     
    $res_count mysql_fetch_row($query2);     
    $tot_records $res_count[0];     
    if (
    $tot_records>1) {
    // finalmente stampo solo gli articoli con + di una immagine
    }

    ma farlo in una sola query non mi riesce

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    codice:
    SELECT articoli.id_articolo, articoli.titolo, articoli.data, immagini.file, immagini.alt, count(*) as numero
    FROM
    immagini JOIN articoli on articoli.id_articolo = immagini.id_articolo
    WHERE articoli.visibile=1 
    GROUP BY articoli.id_articolo
    ORDER BY articoli.data
    HAVING numero > 1
    dovrebbe funzionare ma non è testata

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.