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
Hero Wars: 🌊 Le maree stanno salendo
thearcanecourt si è accreditato come gestore di The Arcane Court: A Tale of Crowns and Witchcraft
AlterEgo → Scopri AlterEgo GdR: un incredibile universo narrativo in stile medievale fantasy che cresce, muta e vive giorno dopo giorno grazie ai suoi giocatori!
unnomeacaso ha recensito La Tana del Ladro
cavaliere ha recensito Storie di Agarthi
Nuovo Play by Forum Fantasy Storico → The Arcane Court: A Tale of Crowns and Witchcraft
Black Sails Chronicles: OFF - Maledizione Ormeth
Seconda Era → Vaste terre coperte di ombre e misteri, dove ogni eroe scrive la storia del Mondo di Eidel. Seconda Era, Play By chat
Dominion Gdr: Riapertura Bokor Nox e chiusura Licantropi Rahu ⛔
bazeel ha recensito Naruto x Boruto GDR - New Rebirth
ratatoskr777 ha recensito Naruto GDR - Beyond the Great War
I dati del generatore di rank sono stati aggiornati!
Sponsorizzati con noi! → Sponsorizza il tuo gioco su GDR-online! Trova nuovi giocatori fra i migliaia di appassionati che ogni giorno visitano il portale!
theduelist92 ha recensito Naruto GDR - Beyond the Great War
demon ray ha recensito Naruto GDR - Beyond the Great War
RAID Shadow Legends: Mazzo Alimentare del Fato - Fette di Pizza 🍕
Hero Wars: Tenta la fortuna con la Veggente! 🔮
Crossout → Tuffati nel mondo di Crossout, il gioco MMO d'azione post apocalittico! Costruisci le tue speciali macchine da combattimento!
Musica e Videogame - Il ruolo della musica nei videogame - esempi a confronto. Scarica la tesi!
Star Trek Equilibrium - Intervista al gestore del play by chat Star Trek: Equilibrium
Star Trek Century - Intervista al gestore di Star Trek Century il play by forum ambientato nell'universo Trek!
Regno di Thyrea - Intervista allo staff di Il Regno di Thyrea.. il play by chat fantasy!
L'Io e l'Avatar - L'Io e l'Avatar - Proiezione e archetipo nei giochi di ruolo online
Interazione Personaggi - Articolo sulle difficoltà nel far interagire il proprio personaggio e come risolverle
Storia del GdR - Storia dei Giochi di Ruolo cartacei dagli albori al Duemila