- Home
- Categorie
- Coding e Sistemistica
- Coding
- Query verifica tutti
-
Query verifica tutti
Ciao Ragazzi
con questa base di dati:Birra(codBir, nome, marca),
Piace(codBev, codBir)Come formulo una query che restituisce le birre che piacciono a TUTTI i Bevitori (codBev)?
-
??
Vuoi una query che selezioni tutti i campi con codBev pieno? Che si riferisca ad una birra? Non ho capito...
-
Ciao portapipe
voglio una query che restituisce il codice delle birre (codBirre) che piacciano a tutti i bevitori (codBev)Esempio
birra(1,Light,Moretti)
birra(2,Light,Tuborg)piace(1,1)
piace(2,2)
piace(2,1)In questo esempio il codice da restituire è 1 perchè la birra 1 piace sia al bevitore 1 che al bevitore 2 quindi a TUTTI i bevitori
Spero di essere stato chiaro
-
Non ho capito la storia dei bevitori.
piace(1,1)
piace(2,2)
piace(2,1)
cosa significano rispettivamente?dai che ci arriviamo!
-
piace (1,1) vuol dire che al bevitore con codice 1, piace la birra con codice 1 ecc...
-
Ok.
Puoi creare una query per l'estrazione delle birre ed una per il numero di utentiSELECT * FROM birre
SELECT * FROM utenti$numutenti=mysql_num_row($queryutenti);
//Poi crei l'array delle birre
while($array=mysql_fetch_array($querybirre)){//e dentro ci metti una seconda query per estrarre il numero di utenti a cui piace la birra che gira nel ciclo while in quel momento
SELECT * FROM piace WHERE codBir='$array['codBir']
$numpiace=mysql_num_rows($querypiace);//e qui ti crei una condizione per la quale se il numero di record dell'ultima query è inferiore a quella degli utenti, non si vede nulla
if($numpiace==$numutenti){//visualizza le birre
}
-
Grazie per il tempo Portapipe ma purtroppo non posso utilizzare nessun linguaggio di programmazione.
Devo fare una query in sql che restituisca il risultato senza alcuna implementazione in nessun linguaggio.
Io credo di dover fare un Join tra le tabelle piace e birre e all'interno delle birre utilizzare un Alias per confrontare che il codice di birra sia lo stesso ma che il codBev sia diverso ma non mi arriva la capa
-
Specificarlo prima?
Devi farti una query con JOIN ma non puoi calcolare tutto da una singola query. Anche solo per calcolare il numero di record hai bisogno di una funzione esterna.
Va bene accorciare il tutto ma ci sono dei limiti
-
@portapipe said:
Specificarlo prima?
Ho detto di dover fare una query nel primo post credevo fosse chiaro
Comunque credo di aver risolto così
SELECT codBirra FROM birra
WHERE codBirra = ALL (SELECT codBirra FROM piace);Ora controllo meglio ma sembra restituire il giusto
-
Esiste un ALL () ?
Vedi, il bello del forum è imparare..Comunque dire che devi fare una query o che puoi fare soltanto una query è differente
-
Si esiste ALL senza parentesi perchè non è una funzione; le parentesi racchiudono una subquery.
Ciao a grazie per l'interessamento
-
Correggo:
SELECT codBirra FROM birra
WHERE codBirra = ALL (SELECT p1.codBirra FROM piace AS p1, piace AS p2
WHERE p1.codBev <> p2.codBev
AND p1.codBirra = p2.codBirra);Prima verificava se la birra piaceva a tutti ma nessun bevitore piaceva un altra birra
Ora è ok
-
Ciao Calabria,
sei sicuro che in quel modo funzioni?
Da quello che sò io, non dovrebbe comportarsi come chiedevi tu, infatti ho fatto una prova cosi:
In birra ho messo:- birra 1
- birra 2
Tabella piace: - utente 1 birra 1
- utente 2 birra 1
- utente 2 birra 2
In questo caso a tutti gli utenti piace la birra 1, ma con quella query non funziona perchè è sufficiente che ad un utente piaccia una birra diversa perchè non restituisca nulla.
EDIT: Sono arrivato tardi :), ma anche questa query mi sembra non vada bene se infatti provi con questi dati:
In birra:- birra 1
- birra 2
piace: - utente 1 birra 1
- utente 2 birra 1
- utente 2 birra 2
- utente 1 birra 2
Mi sembra dia risultati inaspettati