Página 1 de 1

consulta sql, help

Publicado: 28 Abr 2011, 23:42
por Megabyte
Amigos tengo una consulta y las planteo asi:

Por ejemplo, tengo una tabla, llamada datofamilia, en ella llevo el registro del id del usuario (familia_id), pero en la tabla no tengo almacenado el nombre de usuario.

En un archivo php cual sería la consulta, para mostrar el username, teniendo el id en la tabla mencionada? iniciaría de ésta manera?....y/o como terminaría, para mostrarla en una variable en el template?

Código: Seleccionar todo

		$sql = 'SELECT username 
			FROM '.USERS_TABLE.' 
			WHERE user_id ='.$familia_id;
Espero me halla explicado, no soy muy experto... :lee

EDITO:
Si en la variable se le podria asignar como en el mod "view profile" de la siguiente manera:

Código: Seleccionar todo

 'U_VIEW_PROFILE'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $user->data['user_id']),

Re: consulta sql, help

Publicado: 29 Abr 2011, 02:11
por Alorse
Megabyte, esto es soporte de phpBB, por lo que veo, así que lo muevo al foro de soporte.
Y en un rato te respondo como seria.

Re: consulta sql, help

Publicado: 29 Abr 2011, 02:29
por Megabyte
ok Alorse y gracias por tu respuesta.
Off Topic

Alguien sabe si existe en español algo asi como coding-guidelines de la pagina oficial de phpbb, lo comento porque ayudaría bastante tener en español esta info, para los que empezamos en asuntos de "mini" desarrollos...

Re: consulta sql, help

Publicado: 29 Abr 2011, 03:26
por Alorse
Todo según como lo quieras hacer, pero en si hay dos formas básicas de hacerlo (no tan básicas), una es haciendo un SELECT anidando las dos tablas y la otra haciendo un JOIN para unir datos en común de ambas tablas, vamos a nombrar las tablas de la siguiente manera:

phpbb_user = USERS_TABLE
phpbb_datofamilia = DATO_FAMILIA_TABLE

Anidando tablas:

Código: Seleccionar todo

$sql = 'SELECT d.familia_id, u.username, u.user_id, u.user_colour
    FROM ' . DATO_FAMILIA_TABLE . ' d, ' . USERS_TABLE . ' u 
        WHERE d.familia_id = u.user_id';
    $result = $db->sql_query_limit($sql, '10'); // 10 es el limite de usuarios a mostrar por consulta     
Uniendo tablas con JOIN:

Código: Seleccionar todo

$sql = array(
        'SELECT' => 'd.familia_id, u.username, u.user_id, u.user_colour',
        'FROM' => array(
            DATO_FAMILIA_TABLE => 'd',
        ),
        'LEFT_JOIN' => array(
            array(
                'FROM' => array(USERS_TABLE => 'u'),
                'ON' => 'd.familia_id = u.user_id'
            ),
        ),
        'ORDER_BY' => 'u.username ASC',
    );
    $sql = $db->sql_build_query('SELECT', $sql);
    $result = $db->sql_query_limit($sql, '10'); // 10 es el limite de usuarios a mostrar por consulta     
Que es mas largo, complejo y complicado de entender el método con el JOIN y detrás de todo hacen lo mismo, Si, PERO... cuando se tienen tablas muy inmensas es mejor hacerlo con el JOIN ya que la consulta tiene prioridad a una de las tablas (en este caso prioridad a la izquierda "LEFT_JOIN" con la tabla USERS_TABLE), puedes buscar mas sobre JOIN por la net para entender mejor su funcionamiento.

Luego de eso, sea cual sea el método que usaste debes crear la variable de $template para listar los resultados, de la siguiente manera:

Código: Seleccionar todo

    while ($row = $db->sql_fetchrow($result)) {
        $template->assign_block_vars('listar_datofamilia', array(
            'USER_PROFILE' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']);
        ));
    } 
La función get_username_string( ); es intrínseca de phpBB y sirve para obtener el perfil de usuario llevándole algunos parámetros.

Luego en el HTML solo debes poner:

Código: Seleccionar todo

<!-- BEGIN listar_datofamilia -->
   {listar_datofamilia.USER_PROFILE}
<!-- END listar_datofamilia -->
y con eso tendrás el listado de usuarios que están en la tabla datofamilia.

Sobre las guías en español para el manejo de código en phpBB, la verdad no las conozco, creo que seria nuestra labor como Sitio oficial de Soporte phpBB en Español el crearlas o traducirlas.

Re: consulta sql, help

Publicado: 29 Abr 2011, 04:04
por Megabyte
Gracias, estudiare el codigo y te cuento....muchas gracias...

Digo estudiaré, no porque crea que está mal, al contrario creo que sabes lo que escribes. Lo digo xq quiero entender bien lo que hago... :lee

saludos. :ok: