n° 219
Novembre 2017
Dicembre 13, 2017, 10:26:43 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Non mi viene la query  (Letto 4106 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« inserita:: Febbraio 26, 2013, 11:13:22 »

Buonasera a tutti,

sto progettando una specie di portale che mi deve gestire la reportistica su una realtà aziendale.
In poche parole devo gestire ( utenti, computer, blackberry,vodafone card e ipad )
Ho creato un DB con le seguenti tabelle...relazionate tra loro con molti a molti ( mi serve tenere uno storico e la data di consegna del dispositivo )

utenti
bb
computer
vmcc
ipad
utecom ( tabella costituita da utenti_id e computer_id con campo data consegna )
utevmcc ( simile alla precedente)
utebb (idem )
uteipad (...)


Ho creato un form in cui sono presenti n° checkbox tante quante sono i campi di ogni tabella ( per poter far scegliere all'utilizzatore del portale cosa ricercare )
ed in basso una select che rappresenta la chiave di ricerca con una input text accanto per poter inserire il target ricercato...infine un tasto submit per inviare il form

Ora...Esempio pratico :

un tizio possiede soltanto un computer e il blackberry ma non l'ipad e la vodafone card...chi utilizza il portale chiaramente non è a conoscenza di questa cosa...quindi spunterà le checkbox del bb,computer,ipad e vodafone card per vedere che dispositivi ha in possesso.

Ma la query non stampa nulla...dato che nelle tabelle utevmcc e uteipad, l'utente ricercato non esiste (visto che non possiede ne uno ne l'altro )...come posso far stampare i dati del pc e del bb?!

Spero di essermi spiegato Triste

Alla fine...un esempio di query...

Codice:
SELECT computer.Modello,bb.modellobb,vmcc.modellovm,ipad.modelloip
FROM computer,utenti,bb,vmcc,ipad,utecom,utebb,utevmcc,uteipad
WHERE utenti.Cognome = 'aaa'
AND utecom.computer_id = computer.SN AND utecom.utente_id = utenti.User
AND utebb.bb_id = bb.imeibb AND utebb.utente_id = utenti.User
AND utevmcc.vmcc_id = vmcc.imeivm AND utevmcc.utente_id = utenti.User
AND uteipad.ipad_id = ipad.imeiip AND uteipad.utente_id = utenti.User

Registrato
mega_saiyan
Hero Member
*****

Karma: +16/-15
Scollegato Scollegato

Messaggi: 1036


Mostra profilo
« Risposta #1 inserita:: Febbraio 27, 2013, 10:40:02 »

Prova a mettere invece OR al posto di AND e vedi quale risultato ottieni.
Registrato
r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« Risposta #2 inserita:: Febbraio 27, 2013, 11:58:02 »

Guarda...le sto provando tutte...ho provato anche con OR...ma devo addirittura riavviare MySql perchè phpmyadmin si blocca...esempio

Codice:
SELECT computer.Modello,bb.modellobb,vmcc.modellovm,ipad.modelloip
FROM computer,utenti,bb,vmcc,ipad,utecom,utebb,utevmcc,uteipad
WHERE utenti.Cognome = 'aaa'
AND utecom.computer_id = computer.SN AND utecom.utente_id = utenti.User
OR utebb.bb_id = bb.imeibb AND utebb.utente_id = utenti.User
OR utevmcc.vmcc_id = vmcc.imeivm AND utevmcc.utente_id = utenti.User
OR uteipad.ipad_id = ipad.imeiip AND uteipad.utente_id = utenti.User


Stavo provando a utilizzare anche gli outer join....ma mi visualizza anche altre righe...e non sembra essere l'approcio corretto...



Cioè io vorrei solo stampare quello che trova nelle tabelle dove c'è corrispondeza...tralasciando lle altre...dove non c'è
Registrato
DonZaucker74
Jr. Member
**

Karma: +4/-1
Scollegato Scollegato

Messaggi: 150


Mostra profilo
« Risposta #3 inserita:: Febbraio 27, 2013, 12:30:39 »


Quello che vuoi ottenere è il risultato di una "somma" (unione) di piu query.
Mi spiego: un utente possederà quei dispositivi per i quali verrà trovata corrispondenza nella tabella "utecom", PIU' i dispositivi per i quali verrà trovata corrispondenza nella tabella "utevmcc", PIU' i dispositivi per i quali verrà trovata corrispondenza nella tabella "utebb" e via dicendo....
Quindi non puoi mettere in join tutte le tabelle utecom, utevmcc, utebb, ecc ecc allo stesso momento perchè a meno che un utente sia in possesso di TUTTI i dispositivi, il tuo risultato sarà sempre vuoto.
Quello che devi fare è creare più query nelle quali metti in join solo una tabella di corrispondenza dispositivo:

Codice:
SELECT computer.Modello,bb.modellobb,vmcc.modellovm,ipad.modelloip
FROM computer,utenti,bb,vmcc,ipad,utecom,utebb,utevmcc,uteipad
WHERE utenti.Cognome = 'aaa'
AND utecom.computer_id = computer.SN AND utecom.utente_id = utenti.User

SELECT computer.Modello,bb.modellobb,vmcc.modellovm,ipad.modelloip
FROM computer,utenti,bb,vmcc,ipad,utecom,utebb,utevmcc,uteipad
WHERE utenti.Cognome = 'aaa'
AND utebb.bb_id = bb.imeibb AND utebb.utente_id = utenti.User

...


e poi unire i risultati.

dZ
Registrato
r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« Risposta #4 inserita:: Febbraio 27, 2013, 05:45:09 »

Guarda ho provato a fare una selezione per volta...per poi fare l'UNION ...ma niente...se provo ad eseguire questa query mi da 880 righe...invece dovrebbero essere 55

MI visualizza anche ipad.imeiip, ipad.modelloip, quindi mi ripete la visualizzazione del record per n * n volte tante quante sono gli ipad nellla tabella ( in questo caso 4 )...quindi mi visualizza lo stesso record per 16 volte(solo il campo ipad.imeiipad cambia )...ripetuto per 55 che sono gli utenti che soddisfano la richiesta per i BB...arrivamo a 880 record

Codice:
SELECT utenti.Cognome, utenti.Nome, bb.imeibb, bb.modellobb, ipad.imeiip, ipad.modelloip
FROM utenti, bb, ipad, utebb, uteipad
WHERE utenti.GBU = 'xxx'
AND utebb.bb_id = bb.imeibb
AND utebb.utente_id = utenti.User

P.S. : provando ad eseguire la prima query che mi hai consigliato...si blocca tutto Triste
Registrato
DonZaucker74
Jr. Member
**

Karma: +4/-1
Scollegato Scollegato

Messaggi: 150


Mostra profilo
« Risposta #5 inserita:: Febbraio 27, 2013, 07:12:31 »


Scusami, ho fatto un copia-incolla troppo veloce del codice.
Le singole query devono riguardare solo una tabella dispositivo alla volta (in riferimento ai campi della "select", al "from" e alla "where"):

Codice:
SELECT computer.Modello
FROM computer,utenti,utecom
WHERE utenti.Cognome = 'aaa'
AND utecom.computer_id = computer.SN AND utecom.utente_id = utenti.User

SELECT bb.modellobb
FROM utenti,bb,utebb
WHERE utenti.Cognome = 'aaa'
AND utebb.bb_id = bb.imeibb AND utebb.utente_id = utenti.User

...
e cosi via per le altre
...


poi con la union dovresti ottenere quello che cerchi.

dZ
Registrato
r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« Risposta #6 inserita:: Febbraio 27, 2013, 07:48:48 »

Ma per la union...i campi interrogati devono avere per forza il nome uguale?!

Quali sono i vincoli per poter fare l'UNION?!
Registrato
DonZaucker74
Jr. Member
**

Karma: +4/-1
Scollegato Scollegato

Messaggi: 150


Mostra profilo
« Risposta #7 inserita:: Febbraio 28, 2013, 10:29:33 »

Citazione
Ma per la union...i campi interrogati devono avere per forza il nome uguale?!

Quali sono i vincoli per poter fare l'UNION?!

Molto semplicemente i campi delle query "unite" devono essere omogenei; riguardo il nome basta usare gli alias e non dovresti avere problemi.
Comunque, non essendo molto esperto di mysql, credo che una ricerca su google possa colmare le tue lacune alla svelta, oppure guarda qui:

http://dev.mysql.com/doc/refman/5.0/en/union.html


dZ
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines