- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- 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
(
id
int(11) NOT NULL auto_increment,
isola
varchar(255) default NULL,
x
int(2) default NULL,
y
int(2) default NULL,
mare
enum('y','n') NOT NULL default 'y',
PRIMARY KEY (id
)
) ;che descrive ogni casella.
Ho creato una tabella colonie e una players.
CREATE TABLEplayers
(
id
int(11) NOT NULL auto_increment,
nome
varchar(255) NOT NULL,
alleato
enum('y','n') default 'n',
PRIMARY KEY (id
)
)CREATE TABLE
colonie
(
id
int(11) NOT NULL auto_increment,
idPlayer
int(11) NOT NULL,
idIsola
int(11) NOT NULL,
citta
varchar(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.