Navigazione

  • CATEGORIES
  • Discussioni
  • Non letti
  • Recenti
  • Hashtags
  • Popolare
  • Utenti
  • Registrati
  • Accedi
Privacy - Termini e condizioni
© 2020 Search On Media Group S.r.l.
  • Registrati
  • Accedi
  • CATEGORIES
  • Discussioni
  • Non letti
  • Recenti
  • Hashtags
  • Popolare
  • Utenti
  • Stream
  • Interest
  • Categories
  1. Home
  2. Categorie
  3. Coding e Sistemistica
  4. Coding
  5. Problema con query MySql complessa
Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
  • B
    brucee User • 18 mag 2008, 09:52 ultima modifica di

    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 TABLE mondo (
    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 TABLE players (
    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

    0 Miglior Risposta Ringrazia Cita Rispondi

      1 Risposta Ultima Risposta
      Caricamento altri post
      Rispondi
      • Topic risposta
      Effettua l'accesso per rispondere
      • Da Vecchi a Nuovi
      • Da Nuovi a Vecchi
      • Più Voti
       

    • S
      saro78 Bannato User Attivo • 18 mag 2008, 10:31 ultima modifica di

      non si capiscono le relazioni fra le tre tabelle, potresti dettagliarle?

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • B
        brucee User • 18 mag 2008, 11:46 ultima modifica di

        Si scusate, ecco le relazioni

        mondo.id=colonie.idIsola
        colonie.idPlayer=players.id

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • S
          saro78 Bannato User Attivo • 18 mag 2008, 11:51 ultima modifica di

          select *
          from mondo
          left join colonie
          on( mondo.id=colonie.idIsola )
          left join players
          on( colonie.idPlayer=players.id )

          da testare.

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • B
            brucee User • 18 mag 2008, 13:30 ultima modifica di

            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.

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            Caricamento altri post
            Rispondi
            • Topic risposta
            Effettua l'accesso per rispondere
            • Da Vecchi a Nuovi
            • Da Nuovi a Vecchi
            • Più Voti