JOIN o non JOIN

  • Creatore Discussione Creatore Discussione n1k4r0
  • Data di inizio Data di inizio

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
Salve a tutti, ho un problema con una query che proprio non riesco a risolvere:

ho due tabelle una con i dati relativi ad alcuni pittori (nome, anno di nascita, anno di morte, ecc) e una seconda con all'interno le opere (nome file dell'anteprima, titolo, anno).
per la maggior parte delle query non ho problemi ma avrei bisogno di visualizzare i dati completi di tutti gli autori in una pagina e quindi tutti i dati provenienti dalla tabella pittori più tutti i dati della tabella opere in modo da mostrare una serie di schede di autori comprendenti le anteprime delle opere con i titoli.
ho provato con una JOIN
Codice:
SELECT pittori.*, opere.image, opere.titolo FROM pittori, opere WHERE opere.idpittore=pittori.id
ma ovviamente ottengo una riga completa dei dati del pittore per ogni opera che esiste.

c'è un modo di ottenere in una sola riga sia i dati del pittore sia la lista delle opere?
oppure devo gestirmi i risultati da php una volta ottenuti i dati dalla JOIN?

Grazie :)
 
secondo me non join
non credo sia possibile fare quello che chiedi al massimo puoi ottenere una tabella con tutte le opere associate al pittore
la soluzione piu semplice è in php eseguendo una seconda query nel ciclo della prima query
PHP:
<?php

$query = "SELECT * FROM pittori";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    $query = "SELECT * FROM opere WHERE pittore = " . $row['id'];

    //e mostri i risultati
}
?>
 
grazie criric, non trovando nulla a riguardo in giro avevo pensato anche io che non fosse possibile ottenere il risultato con una sola query.
io avevo pensato che dal momento che mi occorre tutto il contenuto di entrambe le tabelle potevo risolvere con due query distinte, una per tutti i pittori e l'altra per tutte le opere e poi ricostruire un array con i risultati come li voglio io da php per poi ritornare il JSON che è quello che mi occorre alla fine.
non so se sia più rapido così o come dici tu ma si tratta solo di provare.

grazie mille
 

Discussioni simili