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
ayakashi si è accreditato come gestore di We love Tokyo
La Tana del Ladro: TdL Stories - Le Solite Fandonie
War Thunder → Aviazione, veicoli corazzati e flotte militari della seconda guerra mondiale. Parteciperai a tutte le principali battaglie!
shiny fluff ha recensito Age of Crystals
Enlisted: Miglioramento dell'operazione "Leadstorm"
Lineage II: Evento di Benedizione dell'Arcangelo
I dati del generatore di rank sono stati aggiornati!
NosTale → Con l’aiuto della spada e della bacchetta magica risolverai abilmente intricate missioni e domerai coraggiosamente mostri selvaggi!
Il gestore di La Tana del Ladro ha risposto alla recensione di elyionar
Cleveland City: Nuova Organizzazione, nuove Chat e nuovi Master
Ex Gratia GDR: Revisione Poteri: Mutazione, Mentali e Utility
Il gestore di Ex Gratia GDR ha risposto alla recensione di deanna
Entropia Universe → Lascia che il tuo avatar esplori nuovi mondi e viaggi tra i pianeti in questo stupendo MmoRpg Sci-Fi Free to Play!
Exclusive Villa GdR: Un morto, nessuna notizia... troppi segreti?
World of Warship: Cantiere navale: Blücher
Enlisted: Operazione "Leadstorm"
naemaer ha recensito La Tana del Ladro
NosTale → Con l’aiuto della spada e della bacchetta magica risolverai abilmente intricate missioni e domerai coraggiosamente mostri selvaggi!
Politica dei Vertici - Consigli utili, piccole accortezze, e riflessioni sulla politica dei Gestori nei GDR
Star Wars e Shannara - Una concisa, ma dettagliata disamina delle analogie fra la saga di Guerre Stellari e quella di Shannara
Never Have I Ever - Intervista alla gestrice di Never Have I Ever, il play by chat ambientato in una scuola del 1999!
Forgotten Kingdom - Intervista al gestore di Forgotten Kingdom, play by chat fantasy mitologico!
Giochi di Sport - Lista completa dei giochi di ruolo online sportivi
ArCon-Artificial Conflict - Intervista ai gestori del play by chat ArCon-Artificial Conflict!
Comunicazione e GdR - I limiti della comunicazione nei GDR Online e come superarli!
OGame - In OGame migliaia di giocatori da tutto il mondo competono tra di loro per conquistare l'intero universo!