Ciao a tutti
Ho un dubbio che credo molti si siano trovati ad affrontare, per cui vorrei capire quali siano le possibili soluzioni.
Ho un classico database con due tabelle in relazione 1-N. Devo estrarre alcuni record dalla tabella 1 e, per ciascuno di essi, tutti i corrispondenti record "figli" nella tabella 2. Poi mostrare i risultati su una tabella HTML, ordinati e raggruppati in base ai record della tabella 1.
Per come la vedo io, ci sono 3 possibili soluzioni:
1. Fare una SELECT su tabella 1 e per ciascun record, da PHP fare una ulteriore SELECT su tabella 2. Questa soluzione è sicuramente la meno scalabile e quella con le peggiori performance, ma l'ho inclusa per completezza.
2. Fare una JOIN su entrambe le tabelle. Scalabilissima e performante, comporta però che il raggruppamento dei record vada fatto via PHP con un meccanismo del tipo "imposta variabile temporanea con l'ID del record e finchè non cambia mostra le righe come sotto-record". Poco "elegante" dal punto di vista della programmazione.
3. Fare una SUB-QUERY in cui, per ciascun record di tabella 1, i corrispondenti di tabella 2 vengano ritornati come array. In pratica:
Tabella_1 - Record_1 - Campo_1
Tabella_1 - Record_1 - Campo_2
Tabella_1 - Record_1 - Sottorecord
--- Tabella_2 - Record_N
--- --- Tabella_2 - Record_N - Campo1
--- --- Tabella_2 - Record_N - Campo2
--- Tabella_2 - Record_K
--- --- Tabella_2 - Record_K - Campo1
--- --- Tabella_2 - Record_K - Campo2
In questo modo, nel codice PHP non ci sarebbe bisogno di fare continuamente controlli ma basterebbe un ciclo secondario dentro il ciclo principale. Mi chiedo: è possibile creare una query MySQL che dia questo risultato?
Grazie a tutti, a presto!

Rispondi quotando
