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
Planethos GdR: Una nuova profezia
NosTale → Con l’aiuto della spada e della bacchetta magica risolverai abilmente intricate missioni e domerai coraggiosamente mostri selvaggi!
Metin2: Informazioni sul server migliorate
Age of Crystals: Rallentamenti estivi
dbzgdr ha risposto alla discussione: Dragon Ball Z Gdr
Titan Revenge: Calendario eventi fino a fine mese online!
World of Warship → MMO gratuito con frenetiche battaglie navali ambientate nel ventesimo secolo. Salpa con la tua nave ed affronta i nemici!
Enlisted: Modifiche al sistema di aggiornamento
pyro72 ha aperto un annuncio di ricerca: World Without Heroes ricerca Giocatore
Storie di Agarthi → Un Varco si apre davanti a te, un mondo tra i mondi è a portata di mano. Lasciati alle spalle le certezze, diventa quello che hai sempre cercato.
World Without Heroes: News GDR: Pubblicazione e Nuovo Inizio
I dati del generatore di rank sono stati aggiornati!
Il gestore di Nexi Generation ha risposto alla recensione di deanna
Sponsorizzati con noi! → Sponsorizza il tuo gioco su GDR-online! Trova nuovi giocatori fra i migliaia di appassionati che ogni giorno visitano il portale!
Giochi Cyberpunk - Lista completa dei giochi di ruolo online cyberpunk
Jedi Survivor - Star Wars Jedi: Survivor, sarà una trilogia? Leggiamo il commento di Stig Asmussen!
Povero Gestore! - La richiesta di essere più presenti per adempiere agli impegni presi scatena strane reazioni..
Tesi Gdr Live - Live action role play: Un trentennio di storia dimenticata. Influenze inaspettate e peculiarità del Gioco di Ruolo dal Vivo.
Contaminazione, Potere e Morte - La Contaminazione, il Potere e la Morte. L’Anello che tiene tra Virgilio, Seneca e la sub-creazione..
Ekelon Chronicles - Intervista alla gestione del play by forum urban fantasy Ekelon Chronicles