Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 07-03-10, 17:49   #1 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
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)?
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 18:57   #2 (permalink)
 
Data di registrazione: Feb 2010
Messaggi: 136
??

Vuoi una query che selezioni tutti i campi con codBev pieno? Che si riferisca ad una birra? Non ho capito...
portapipe non in linea   Rispondi citando
Vecchio 07-03-10, 19:11   #3 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
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
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 19:13   #4 (permalink)
 
Data di registrazione: Feb 2010
Messaggi: 136
Non ho capito la storia dei bevitori.
piace(1,1)
piace(2,2)
piace(2,1)
cosa significano rispettivamente?

dai che ci arriviamo!
portapipe non in linea   Rispondi citando
Vecchio 07-03-10, 19:16   #5 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
piace (1,1) vuol dire che al bevitore con codice 1, piace la birra con codice 1 ecc...
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 19:28   #6 (permalink)
 
Data di registrazione: Feb 2010
Messaggi: 136
Ok.
Puoi creare una query per l'estrazione delle birre ed una per il numero di utenti

SELECT * 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
}
portapipe non in linea   Rispondi citando
Vecchio 07-03-10, 19:40   #7 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
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
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 19:47   #8 (permalink)
 
Data di registrazione: Feb 2010
Messaggi: 136
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 non in linea   Rispondi citando
Vecchio 07-03-10, 20:03   #9 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
Quote:
portapipe Visualizza il messaggio
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
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 20:07   #10 (permalink)
 
Data di registrazione: Feb 2010
Messaggi: 136

Esiste un ALL () ?
Vedi, il bello del forum è imparare..

Comunque dire che devi fare una query o che puoi fare soltanto una query è differente
portapipe non in linea   Rispondi citando
Vecchio 07-03-10, 20:16   #11 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
Si esiste ALL senza parentesi perchè non è una funzione; le parentesi racchiudono una subquery.

Ciao a grazie per l'interessamento
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 20:26   #12 (permalink)
User Attivo
 
L'avatar di Calabria
 
Data di registrazione: May 2006
Ubicazione: Calabria
Messaggi: 1,259
Invia un messaggio tramite Skype a Calabria
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
__________________
H-index!
Calabria non in linea   Rispondi citando
Vecchio 07-03-10, 20:38   #13 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
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

Ultima modifica di Thedarkita : 07-03-10 20:43.
Thedarkita ora è in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:25.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.