Query del principiante

di Anonimizzato13998 il
3 risposte
Come da oggetto ho una domanda che potrà sembrarvi banale ma per me che stò iniziando a provare mysql per diletto non lo è.
Ho il classico esempio di tre tabelle
tabella autori:id, nome_autore
tabella oggetti:id,nome_oggetto,descrizione_oggetto
tabella oggetti_autori:id, id_autore,id_oggetto
L'ultima tabella collega gli autori agli oggetti.
Ogni autore può creare più oggetti ed ogni oggetto può avere più autori.


La domanda è questa:
Posso, con una sola query, (con più query ci sono arrivato) estrarre nome_autore, nome_oggetto, descrizione_oggetto e oggetti_autori.id partendo da nome_autore e nome_oggetto?
Tipo SELECT .... WHERE autori.nome_autore LIKE %valore_inserito% AND oggetti.nome_oggetto LIKE %valore_inserito_1% .
O il database con cui stò giocando nella realtà non esisterebbe perchè è progettato male.?

Grazie

3 Risposte

  • SELECT nome_autore,nome_oggetto,descrizione_oggetto,id_oa FROM autori a JOIN oggetti_autori b JOIN oggetti o ON a.id = b.id_autore AND o.id = b.id_oggetto WHERE nome_autore = ? AND nome_oggetto = ?
    puoi provare con una query di questo tipo.
  • Domani provo, ora vado a letto, grazie.
  • Grazie, funziona perfettamente.
    Non ho capito perchè il linguaggio necessita degli alias quando potrebbe usare sempre i nomi di tabella ma và bene così.
    Ho provato a fare delle prove, trovo sql particolarmente potente, ma non capisco la logica che ci stà dietro. Ho provato ad invertire le join ma non funziona ci deve essere un criterio che stabilisce quale tabella usare per prima etc. Nel recuperare i dati con php inoltre utilizzavo l'alias della tabella.nome_campo e non funzionava, voleva solo il nome del campo, insomma devo leggermi qualcosa che mi chiarisca le idee. Hai qualche suggerimento su quale lettura, un profano, possa fare?
    Ciao e grazie ancora
Devi accedere o registrarti per scrivere nel forum
3 risposte