Pagina 1 di 1

Query tra più tabelle

Inviato: 07/03/2013, 18:04
da digreo
Sto cercando di fare una chat e quindi ho una tabella personalizzata in cui scrivo i record.. ma non riesco a risalire allo username della tabella USERS_TABLE attraverso lo user_id della CHAT_TABLE

Codice: Seleziona tutto

$sql = "SELECT c.chat_id, c.user_id, c.chatxt, u.user_id, u.username, u.user_colour FROM ".CHAT_TABLE." c LEFT JOIN ".USERS_TABLE." u ON u.user_id=c.user_id WHERE c.user_id=u.user_id ORDER BY c.chat_id ASC LIMIT 0,100";
oppure

Codice: Seleziona tutto

$sql = "SELECT c.chat_id, c.user_id, c.chatxt, u.user_id, u.username, u.user_colour FROM ".CHAT_TABLE." c , ".USERS_TABLE." u WHERE c.user_id=u.user_id ORDER BY c.chat_id ASC LIMIT 0,100";
La variabile template sarebbe questa

Codice: Seleziona tutto

'USERCHAT'	=> get_username_string('full', $row['c.user_id'], $row['u.username'], $row['u.user_colour'])
Così restando, mi da sempre OSPITE e senza link!

PS. Ho provato a togliere tutta la query relativa alla USERS_TABLE e nonostante manca $row['u.username'], $row['u.user_colour'], il risultato della query è OSPITE ma perfettamente linkabile!

Re: Query tra più tabelle

Inviato: 07/03/2013, 18:16
da digreo
Ho risolto così, ma mi chiedo se posso fare di meglio e migliorare il codice (in pratica ho concatenato due query all'interno del ciclo while)

Codice: Seleziona tutto

$sql = "SELECT chat_id, user_id, chatxt FROM ".CHAT_TABLE." ORDER BY chat_id ASC LIMIT 0,100";
$result = $db->sql_query($sql);

while ($row = $db->sql_fetchrow($result)){
  $sql_user = "SELECT user_id, username, user_colour FROM ".USERS_TABLE." WHERE user_id=".$row['user_id'];
  $result_user = $db->sql_query($sql_user);
  while ($row_user = $db->sql_fetchrow($result_user)){
    $template->assign_block_vars('chatting',array(
      'USERCHAT'	=> get_username_string('full', $row['user_id'], $row_user['username'], $row_user['user_colour']),
      'CHATXT' => $row['chatxt'],
      'CHATID' => $controw)
    );
  }
$db->sql_freeresult($result_user);
}
$db->sql_freeresult($result);

Re: Query tra più tabelle

Inviato: 07/03/2013, 18:24
da Micogian
Per me andava bene la seconda query, però la variabile dovrebbe essere così:

Codice: Seleziona tutto

'USERCHAT'   => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'])

Re: Query tra più tabelle

Inviato: 08/03/2013, 11:30
da digreo
Cioè scusami.. vuoi dire che questa roba funziona?

Codice: Seleziona tutto

$sql = "SELECT c.chat_id, c.user_id, c.chatxt, u.user_id, u.username, u.user_colour FROM ".CHAT_TABLE." c , ".USERS_TABLE." u WHERE c.user_id=u.user_id ORDER BY c.chat_id ASC LIMIT 0,100";

'USERCHAT'   => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'])
OO