- Home
 - Categorie
 - Coding e Sistemistica
 - Coding
 - Problema con query MySql complessa
 
- 
							
							
							
							
							
Problema con query MySql complessa
Premessa:
devo costruire una tabella 100x100 rappresentante il mondo.
Totale=100.000 caselle. Ogni casella ha x e y.
In una ventina di caselle ci sono dei giocatori con delle colonie.(in una casella ci può essere più di una colonia)Ho creato una tabella mondo
CREATE TABLEmondo(
idint(11) NOT NULL auto_increment,
isolavarchar(255) default NULL,
xint(2) default NULL,
yint(2) default NULL,
mareenum('y','n') NOT NULL default 'y',
PRIMARY KEY (id)
) ;che descrive ogni casella.
Ho creato una tabella colonie e una players.
CREATE TABLEplayers(
idint(11) NOT NULL auto_increment,
nomevarchar(255) NOT NULL,
alleatoenum('y','n') default 'n',
PRIMARY KEY (id)
)CREATE TABLE
colonie(
idint(11) NOT NULL auto_increment,
idPlayerint(11) NOT NULL,
idIsolaint(11) NOT NULL,
cittavarchar(255) default NULL,
PRIMARY KEY (id)
)Fine premessa.
Io ho la necessità di disegnare il mondo e mi serve una query che mi tiri fuori tutte le caselle del mondo e mi dica se in quella casella c'è una colonia oppure no.Partendo dal presupposto che non posso fare una seconda query per ogni casella altrimenti farei 100.001 query per disegnare il tabellone, ho provato a incasellarmi tutte le colonie in un array.
Faccio una query che mi da le coordinate del mondo e per ogni riga(cioè casella) faccio un match con le coordinate memorizzate nell'array, ma è troppo lento e per niente performante.Morale mi serve una query che mi tiri fuori tutte le caselle con relative coordinate e mi dica se in quella casella ci sono delle colonie.
Se qualcuno riesce a darmi una mano gliene sarò riconoscente.
Per la cronaca questo dovrebbe diventare un tool per il gioco online Ikariam.Grazie
Brucee
 - 
							
							
							
							
							
non si capiscono le relazioni fra le tre tabelle, potresti dettagliarle?
 - 
							
							
							
							
							
Si scusate, ecco le relazioni
mondo.id=colonie.idIsola
colonie.idPlayer=players.id
 - 
							
							
							
							
							
select *
from mondo
left join colonie
on( mondo.id=colonie.idIsola )
left join players
on( colonie.idPlayer=players.id )da testare.
 - 
							
							
							
							
							
Mi sa che funziona.
Non conosco l'utilizzo di "ON" sul left join, sarà meglio che me lo studi.
Grazie mille, mi perfeziono lo script, poi se volete lo pubblico anche per gli altri.