2009-07-31 14 views
13

Tramite un servizio Web, la mia applicazione riceve un elenco di identificatori. Con questo elenco, devo cercare un campo, uno per identificatore. Se il campo non esiste, il valore deve essere nullo (deve essere mostrato).MySQL Il modo migliore per selezionare l'utilizzo dell'elenco degli ID

Mi chiedo quale sarebbe l'approccio migliore. Per prima cosa ho pensato che fosse meglio creare una tabella temporanea contenente gli id ​​e quindi unirla alla tabella che contiene i dati, ma se sono corretto questo richiede almeno 1 query per identificatore per inserirlo nella tabella temporanea. In questo caso, sembra che potrei altrettanto ripetere l'elenco degli identificativi nella mia applicazione e interrogare il database 1 per 1. È corretto? Quale approccio puoi consigliare?

saluti,

Coen

risposta

20

Utilizzare il SELECT WHERE IN() sintassi per ottenere un set di risultati con i dati necessari, quindi scorrere su di esso nel codice. In questo modo si esegue una query sul database solo una volta e si ottengono solo le informazioni necessarie.

+0

+1 modo migliore per farlo – alex

0

Mostrare null è il trucco, è necessario unire la tabella a se stesso, quindi ci sono due ricerche di indice per record. Basta fare una query 1 a 1 per ogni identificatore richiederà solo una ricerca dell'indice.

In pratica, non sarà due volte più lento, poiché l'identificatore si troverà nella cache della chiave al momento dell'esecuzione della seconda ricerca.

Un'altra opzione consiste nel rendere l'output utilizzando gli identificatori di input e utilizzare un "IN" come suggerito in precedenza. I record nulli non saranno nell'output della query, ma sarebbe ok dato che tu sai cosa è stato richiesto.

+0

Questo presuppone che gli oggetti che ha ricevuto siano gli unici elementi nella tabella, se sono un sottoinsieme, allora tornerà più di quanto ha chiesto. – MyItchyChin

Problemi correlati