Visualizzazione risultati 1 fino 11 di 11

Discussione: [MySql] Select tra tre Tabelle

  1. #1
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito [MySql] Select tra tre Tabelle

    E qua viene il dubbio. Si può? Se si, come? Mi aiutereste a generare la seguente query?

    Date le tabelle

    Codice:
    --
    -- Struttura della tabella `tbot_accounts`
    --
    
    CREATE TABLE `tbot_accounts` (
      `account_id` bigint(20) NOT NULL auto_increment,
      `user_id` bigint(20) NOT NULL default '0',
      `account_server` text NOT NULL,
      `account_user` text NOT NULL,
      `account_pass` text NOT NULL,
      `account_time` bigint(20) NOT NULL default '0',
      `account_lastact` bigint(20) NOT NULL default '0',
      `account_valid` int(11) NOT NULL default '0',
      `account_cookies` longtext NOT NULL,
      PRIMARY KEY  (`account_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    -- --------------------------------------------------------
    
    --
    -- Struttura della tabella `tbot_ips`
    --
    
    CREATE TABLE `tbot_ips` (
      `ip_id` bigint(20) NOT NULL auto_increment,
      `ip_ip` text NOT NULL,
      `ip_time` bigint(20) NOT NULL default '0',
      `ip_agent` longtext NOT NULL,
      `account_id` bigint(20) NOT NULL default '0',
      PRIMARY KEY  (`ip_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    -- --------------------------------------------------------
    
    --
    -- Struttura della tabella `tbot_tasks`
    --
    
    CREATE TABLE `tbot_tasks` (
      `task_id` bigint(20) NOT NULL auto_increment,
      `account_id` bigint(20) NOT NULL default '0',
      `task_vid` bigint(20) NOT NULL default '0',
      `task_action` text NOT NULL,
      `task_time` bigint(20) NOT NULL default '0',
      `task_param` longtext NOT NULL,
      `task_done` int(1) NOT NULL default '0',
      PRIMARY KEY  (`task_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    Devo selezionare una riga dalla tabella tbot_accounts, sapendo che le righe delle tre tabelle sono legate dal campo account_id.
    La riga deve avere:
    • tbot_accounts.account_valid > -1
    • Nessun record con account_id pari a quella riga nella tabella tbot_ips
    • task_time < NOW()
    • task_done=0
    • deve avere il task_time minore possibile.
    Ultima modifica di matt93 : 05-04-2010 alle ore 00.52.16

  2. #2
    Guest

    Predefinito

    Per selezionare i dati da più tabelle bisogna usare le "join" puoi trovarne una guida su html.it nella sezione sui database i particolare su MYSQL

  3. #3
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    E fin lì c'ero arrivato, ma come faccio con più di 2 tabelle?

  4. #4
    Guest

    Predefinito

    Dovrebbe essere come una normale join (devo ancora studiare :S); eccoti un link http://www.wellho.net/solutions/mysq...re-tables.html

  5. #5
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    Ho elaborato questo, ma non toglie le righe che hanno già un account_id uguale nella tabella tbot_ips...

    Codice:
    SELECT * FROM `tbot_tasks`,`tbot_accounts`,`tbot_ips` WHERE `tbot_accounts`.`account_id`=`tbot_tasks`.`account_id` AND `tbot_tasks`.`task_done`=0 AND `tbot_accounts`.`account_valid`>-1 GROUP BY `tbot_tasks`.`task_id` ORDER BY `tbot_tasks`.`task_time` ASC

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Se non mi sbaglio, devi usare SELECT DISTINCT account_id ma il problema è poi selezionare gli altri campi per estrarli.

  7. #7
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Prova questo:
    Select * from Tabella1 inner join Tabella2 on Tabella1.idaccount = Tabella2.idaccount
    inner join Tabella3 on Tabella1.Idaccount = Tabella3.idaccount
    Where condizioni...
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  8. #8
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    Il problema rimane sempre quello di escludere gli account_id già presenti nella tabella tbot_ips...

  9. #9
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non ho capito.
    Come la colleghi la tabella tBot_ips alle altre?
    Fai un esempio.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  10. #10
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    nella tabella tbot_ips c'è il campo account_id.

    account_id è il numero dell'account a cui un'indirizzo IP è relegato, se il numero è 0 l'indirizzo IP non è legato a nessun account.

    Dai risultati della query devo eliminare quelli che hanno il proprio account_id in una riga all'interno della tabella tbot_ips.

  11. #11
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Select * from Tabella1 inner join Tabella2 on Tabella1.idaccount = Tabella2.idaccount WHERE Tabella1.idaccount not in (SELECT DISTINCT IDACCOUNT from TabellaIPS)
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •