Query sulle query :-) postato il 22/05/2016 23:23:27 nel forum programmazione, gdrcd, open source, hosting
Buonasera a tutti,
mi sono imbattuto in un piccolo problema di "sintassi" delle query e chissà che non ci sia una soluzione "semplice" al mio "complesso problema"...
PREMESSA:
Nella Tabella "ClgPersonaggioOggetto" ho la lista di tutti gli oggetti assegnati ai vari PG. Questa Tabella contiene solo l'ID dell'oggetto posseduto dai PG in quanto le informazioni vere e proprie dell'oggetto sono contenute nella tabella "Oggetto".
Per selezionare tutti gli oggetti (e le relative info dalla Tabella Oggetti) posseduti da un singolo PG, che soddisfano uno o più requisiti (quindi per selezionare tutte le info di varie righe di Tabella) uso questa query:
Pagine → 1
23/05/2016 01:52:44
hehehe, no no, la Tab è corretta così, si chiama IDOggetto e la chiave primaria è composta da Nome+IDOggetto (quindi ogni PG può avere solo UN oggetto con lo stesso IDOggetto, ma più PG possono possedere lo stesso Oggetto...
La seconda tabella è semplicemente:
IDOggetto
Tipo
Descrizione
DescrizioneLunga
Valore
Difesa
Attacco
Uso
Forza
Mente
URLImg
Creatore
DataInserimento
Comm
Cat
(delle suddette colonne ci interessano, in questo caso, solo quelle in grassetto)
23/05/2016 09:23:38 e modificato da soizora il 23/05/2016 10:00:39
Ma fare una clausula WHERE...AND...IN?
EDIT: comunque ci ho pensato su. Non sono necessarie ne le clausule in, ne strane subquery, perchè a te basta prendere ogni riga che rispetti la clausula nome=Carter AND equipaggioto=1.
Poi però devi aggiustare lo stamp nel codice inserendo una condizione del tipo:
while(row=mysql_fetch(query)){
output=row['idoggetto'];
if (row['comm']!=NULL)
{output .=row['slot1']...row['slot10']}
}
echo output;
23/05/2016 15:33:16
Intanto grazie per le risposte. Ora procedendo per ordine:
Sì, Equipaggiato deve essere sempre =1, non importa se parliamo di singoli oggetti (Comm=NULL) Kit, o Zaini.
Gli slot sono "gli spazi" dello Zaino (in gioco) e le caselle del database in cui vanno gli ID (degli oggetti che in gioco sono nello zaino).
Cmq, la relazione tra le due tabelle (con un JOIN) funziona bene... il rpoblema è ottenere i risultati da due "query diverse" o meglio, una query che mi da sia un singolo valore di una specifica riga (in Cui Comm=NULL ed Equip =1), sia valori multipli della stesa riga (in cui Comm=Kit o Zaino ed Equip=1, appunto).
23/05/2016 17:04:13
prova a fare come ti ho consigliato, invece di lavorare sulla query, lavora sulla stamp dei dati in output, giocando sulle condizioni if in modo che quando comm=NULL non vengano stampati i valori degli slot.
23/05/2016 17:13:17
24/05/2016 09:35:29
devo essere sincero non ho ben capito cosa tu voglia fare ma vedo addirittura scomodate delle classi per una semplice print.
seppur io sia, come si sa, fan accanito dell'ottimizzazione del codice e della buona progettazione, una singola query sarebbe troppo complessa o chiederebbe troppo tempo solo per il fine tuning, quindi malvolentieri ti suggerisco di esportare il tutto e lavorare con PHP, in modo tale che tu abbia le idee chiare ed un ambiente di sviluppo a te conosciuto.
quella che ti serve, ad ogni modo, è una tabella pivot (sempre se ho ben colto il problema) la cui strutturazione richiede una conoscenza di SQL avanzata (tipo quella di Puteola) ed il fornirti la soluzione cotta sul forum favorirebbe l'impossibilità di una futura modifica da parte tua, facendoti dipendere sempre da qualcuno esterno.
fai una gran select da una parte filtrata, fai la select dall'altra e via di for.
24/05/2016 10:21:28
Secondo me l'approccio usato è mal studiato e andrebbe riveduto.
Un mio consiglio è di procedere in maniera inversa nel senso.
Attualmente salvi nell'oggetto contenitore l'id degli oggetti contenuti.
Questo ti comporta il fatto che:
- per ogni oggetto compresi quelli che non sono contenitori hai 8 campi vuoti
- se decidi per qualsiasi motivo di aumentare il numero massimo di oggetti contenuti devi andare ad aggiungere proprio un campo nel database.
- per recuperare i dati degli oggetti contenuti in un contenitore devi agire di volta in volta sul singolo contenitore.
Io invece avrei usato un campo solo nella tabella clgpersonaggiooggetto chiamato id_oggetto_padre, dove venga indicato l'id che contiene l'oggetto.
Questo ti permette di risparmiare 7 campi per oggetto e al tempo stesso ti permette di gestire molto più facilmente il recupero dei dati degli oggetti.
Pagine → 1
Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD, Open Source, Hosting Elenco Forum
goldaries ha recensito Games of Thrones Winter is Coming
spike92 ha recensito Il Grande Blu
World of Tanks → Lanciati in epiche battaglie spalla a spalla con altri giocatori. Conquista la supremazia nel mondo dei Carri Armati!
World of Warship: Aggiornamento 13.11: anteprima
gdr-online.com ha risposto alla discussione: Parere su BrowserGame
W40K Dathyar: Specializzazioni
NosTale: Ora nel NosMall: dolcissimi mini-pet
Ikariam → Su una piccola isola, in qualche parte del Mediterraneo, sorge un`antica civiltà. Sotto la tua guida inizia un`era di ricchezza e di scoperte!
DarkOrbit: Aggiorna la scatola dell'Apocalisse!
I dati del generatore di rank sono stati aggiornati!
aik ha aperto una nuova discussione: Parere su BrowserGame
eXtremelot: La Bussola dei Cartografi di Lot
Pirates of the Caribbean → Parti per un'avventura con Jack Sparrow, Will Turner, il Capitano Barbossa e altri spadaccini del franchise cinematografico Pirati dei Caraibi!
Dallas Black Gold: [Trama] JFK Memorial
Hero Wars: Artefatti dei Titani!
bother ha recensito Never Have I Ever: Mysteries of Laconia Bay
Games of Thrones Winter is Coming: #giveaways codice regalo! 🥳
Metin2 → Sfida i tuoi rivali a battersi con te e dimostra la tua superiorità in questo mondo fantasy!
Regole Base GdR - Le Regole Base dei Giochi di Ruolo: tutto quello che devi sapere per iniziare
Gdr: Nessun Confine - Da quando è nato, il GDR ha sempre ridefinito i propri spazi, i propri confini..
Anello di Cthulhu - L'Anello di Cthulhu. Il mito religioso in Tolkien e Lovecraft!
Hall of Fame - Le schede di gioco che hanno avuto il maggior numero di visualizzazioni di pagina uniche!
Critica ai GDR - Critica sui giochi di ruolo online pubblicata da Punto Informatico
L'Isola di Mon - Recensione di uno dei primi giochi di ruolo online fantasy in Italia