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
Shadow Scape: ✨ Land nuovamente aperta!
La Tana del Ladro: ~ Forte Xantharl - La Rocca dei Burroni ~
Exclusive Villa GdR → Las Vegas, azzardo, vizi, soldi, intrighi... Più le sue luci sono scintillanti, più le sue ombre sono oscure. La città che non dorme mai, vi aspetta.
Dalemyr: Pratoverde, festa in tutti i Reami
Entropia Universe: Note sulla versione di Entropia Universe 18.13.0
Gioco più visitato di Aprile 2025: The Last Sparks - Savannah Tales
Enlisted: Rendiamo Enlisted un posto migliore N° 68
Hogwarts Express → Un segreto nascosto da secoli sta per essere svelato. Il mondo magico e quello babbano non saranno più gli stessi!
I dati del generatore di rank sono stati aggiornati!
One Piece World: Level Up verso l'unicità
Legacy of Magic: Missione Superstizione IIII
Football Team Soccer: Ultimo numero del nostro magazine!
Dominion Gdr → In una NY con un tessuto sovrannaturale nascosto, il Bronx Vampirico e il Queens dei Lupi ribollono sotto il Dominio dei Bokor. Quanto durerà la pace?
Enlisted: Saldi di maggio in Enlisted
Raxhodya Yaoi GdR: Nuova Trama: L'incubo Senza Volto
Shadow Scape: ✨ Chiusura momentanea
Entropia Universe → Lascia che il tuo avatar esplori nuovi mondi e viaggi tra i pianeti in questo stupendo MmoRpg Sci-Fi Free to Play!
Backwaters - Intervista ai gestori del play by chat Weird Western Backwaters!
Saint Seya City - Recensione di Saint Seya City. Scopri dentro di te il settimo senso...
Erant - Intervista allo staff di Erant il play by chat fantasy storico da giocare su Discord!
InnoGames - Scopri con noi i Browser Game della InnoGames uno dei maggiori produttori di gaming mondiali!
Interazione Personaggi - Articolo sulle difficoltà nel far interagire il proprio personaggio e come risolverle
The Young Riders - Recensione del play by email The Young Riders ambientato nel selvaggio Far West dei telefilm
Traduzione nella Terra di Mezzo - Le traduzioni di The Lord of the Rings di Vittoria Alliata di Villafranca e Ottavio Fatica
Betsu No Tamashi - Intervista al gioco di ruolo play by chat a tema manga Betsu No Tamashi