Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    51

    prelevare un solo risultato da una tabella con inner join (select)

    Ciao a tutti ho un grosso problema, in pratica quando l'utente esegue una ricerca tra gli annunci, quando mostro tutti i risultati devo mostrare l'anteprima di un immagine relativa a quell'annuncio, però voglio che l'immagine sia la prima che trovo nella tabella immagini.
    Le tabelle sono organizzate così:
    annunci: idannuncio, cat, regione, provincia, comune, prezzo, titolo, descrizione
    immagini: idannuncio, idimmagine, percorsoImm
    Codice PHP:
    "SELECT * FROM annunciINNER JOIN(SELECT percorsoImm,idannuncio,idimmagine FROM immagini LIMIT 1) AS immagini ON annunci.idannuncio = immagini.idannuncio WHERE $where LIMIT $first$x_pag"
    però il limit 1 nella seconda select mi va a oscurare il limit della prima, come posso fare?

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    ci sono due strade da seguire. la prima fai tre join la seconda, a mio avviso migliore anche in termini di prestazioni, fai una select secca per recuperare l'id della foto.

    quindi

    codice:
    select * FROM annunci a
    INNER JOIN immagini i ON a.id_annuncio = i.id_annuncio
    LEFT JOIN (SELECT id_immagine FROM immagini WHERE id_annuncio = a.id_annuncio LIMIT 1) ii ON ii.id_immagine = i.id_immagine
    non l'ho provata (essendo domenica sera) ma il concetto penso sia chiaro.
    ad ogni modo ribadisco che è meglio fare due query distinte.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    51
    facendo due query separate come faccio ogni volta a estrarre l'immagine con l'id_annuncio uguale a l'id_annuncio della tabella annunci?

  4. #4
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    Quote Originariamente inviata da Mali10 Visualizza il messaggio
    facendo due query separate come faccio ogni volta a estrarre l'immagine con l'id_annuncio uguale a l'id_annuncio della tabella annunci?
    nel codice che stampa l'annuncio, recuperi l'id dello stesso e fai una query del tipo

    codice:
    SELECT * FROM immagini WHERE id_annuncio = $id_annuncio LIMIT 1
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  5. #5
    Se ho ben compreso il tuo problema è quello di prendere la prima immagine tra le N possibili presenti per ogni annuncio.

    Come dicevi le tabelle sono organizzate così:
    annunci: idannuncio, cat, regione, provincia, comune, prezzo, titolo, descrizione
    immagini: idannuncio, idimmagine, percorsoImm

    Scomponiamo i problemi:
    1) come prendo la prima immagine per ogni Idannuncio
    2) mettere in join la query che prende per ogni idannuncio la prima immagine con gli annunci

    Risposte:
    per la 1) definisco il criterio che per me la prima immagine per ogni idannuncio è quella che a pari Idannuncio ha l'idimmagine più bassa; da qui è semplice ottenere una query che mi prenda il minimo idimmagine raggruppando per idannuncio

    SELECT idannuncio,MIN(idimmagine) AS idimmagine
    FROM immagini
    GROUP BY idannuncio

    Per la 2) non ci resta che mettere in join il tutto:
    SELECT A.*,I.*
    FROM Annunci A
    LEFT OUTER JOIN (
    SELECT idannuncio,MIN(idimmagine) AS idimmagine
    FROM immagini
    GROUP BY idannuncio
    ) TBFirstImg ON TBFirstImg.idannuncio=A.idannuncio
    LEFT OUTER JOIN Immagini I ON I.idannuncio=TBFirstImg.idannuncio AND I.idimmagine=TBFirstImg.idimmagine

    Ho usato Left perché ipotizzo che possa esistere il caso in cui un annuncio non abbia immagini e non voglio perdermi l'annuncio.
    Se ti stai approcciando all'argomento database dai uno sguardo anche a: SQL, database relazionale, regole di Codd, modello E-R, forme normali, normalizzazione con il mio testo: Semplicemente Database

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.