Ho queste 3 tabelle con i rispettivi valori:

Codice PHP:
CREATE TABLE utenti(
id_utente int unsigned AUTO_INCREMENT NOT NULL default '0',
id_gruppo tinyint unsigned NOT NULL default '0',
username varchar(50NOT NULL default '',
password char(8NOT NULL default '',
PRIMARY KEY(id_utente)
);

INSERT INTO utenti VALUES (11'Alessandro Admin''password');
INSERT INTO utenti VALUES (22'Luca''password');
INSERT INTO utenti VALUES (33'Gatsu''password');

// -----------------------------------------------------------------

CREATE TABLE gruppi(
id_gruppo tinyint unsigned AUTO_INCREMENT NOT NULL default '0',
nome_gruppo varchar(100NOT NULL default '',
mod_profili tinyint unsigned NOT NULL default '0'// permesso per modificare i profili
mod_discussioni tinyint unsigned NOT NULL default '0'// permesso per modificare le discussioni
PRIMARY KEY(id_gruppo)
);

INSERT INTO gruppi VALUES (1'Amministratori'11);
INSERT INTO gruppi VALUES (2'Moderatori'01);
INSERT INTO gruppi VALUES (2'Utenti'00);

// -----------------------------------------------------------------

CREATE TABLE online
id_utente int unsigned AUTO_INCREMENT NOT NULL 
default '0',
tempo_connessione char(10NOT NULL DEFAULT '',
PRIMARY KEY(id_utente)
); 
E successivamente effettuato questa query, è giusta ? Se è giusta, c'è un modo per farla in modo più elegante?

Codice PHP:
$q mysql_query("SELECT u.*, g.mod_profili, g.mod_discussioni, o.* FROM utenti AS u, gruppi AS g, online AS o INNER JOIN u.id_utente = o.id_utente AND u.id_gruppo = g.id_gruppo AND g.id_utente = ".intval($_COOKIE['id']));
$utente mysql_fetch_array($q);

if ( 
$utente['mod_profili'] == OR $utente['mod_discussioni'] == 1  )
mostra_pannello_amministrativo();
else
mostra_pannello_utente();

// ... MOSTRA GLI UTENTI CONNESSI