Per semplificare il mio problema, supponiamo di avere due tabelle, una prodotti, ed una foto.
Ogni prodotto può avere delle foto, può non averne affatto e se ne ha, può averne quante se ne vuole, quindi ho organizzato la tabella foto così
foto_id
foto_id_prodotto
foto_campo... blob che contiene la foto
ora vorrei tirare fuori li lista dei prodotti, e visualizzare accanto al prodotto una delle foto ad esso relative se ne ha, una sola, a caso. Per far questo avevo scritto questo query
codice:
SELECT prodotto_id, foto_id
FROM prodotti LEFT JOIN foto ON prodotto_id=foto_id_prodotto;
Solo che in questa maniera mi duplica i record, nel senso che visualizza tutti i prodotti che hanno più foto più volte, tante quante le foto che ci sono, e le tira fuori ognuna con la foto diversa.
Il problema non è risolvibile ne con la Inner join ne con la right join, la soluzione deve essere un'altra.
Ho provato con DISTINCT prodotto_id, ma con la LEFT JOIN non ha nessun effetto, quindi ho trovato un'altra soluzione, una query di questo tipo:
codice:
SELECT prodotto_id, prodotto_id AS contatore, foto_id
FROM prodotti LEFT JOIN foto ON prodotto_id=foto_id_prodotto
GROUP BY prodotto_id;
la cosa funziona, ma il problema è una altro, mentre la prima query viene eseguita in un lampo, la seconda impiega circa 6 secondi, perchè la query ve l'ho postata un po' semplificata, altrimenti ci sarebbero altre 6 JOIN, nella clausola HAVING ci sono circa 4 condizioni e la tabella prodotti ha circa 30.000 record.
Come posso trovare una soluzione che impieghi un tempo ragionevole per tirare fuori questi dati in questa maniera??