phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Query tra più tabelle

Supporto per phpBB 3.0.x.
Rispondi
digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Query tra più tabelle

Messaggio da digreo » 07/03/2013, 18:04

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!

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Query tra più tabelle

Messaggio da digreo » 07/03/2013, 18:16

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);

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Query tra più tabelle

Messaggio da Micogian » 07/03/2013, 18:24

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'])

digreo
Utente
Utente
Messaggi: 265
Iscritto il: 02/10/2012, 12:23
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.3.16
Database: Mysql
Contatta:

Re: Query tra più tabelle

Messaggio da digreo » 08/03/2013, 11:30

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

Rispondi

Torna a “[3.0.x] Forum di Supporto”

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti