Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[Consulta] Unir campos de dos tablas en una consulta SQL
#1
Que tal,

Pues con la novedad que tengo una duda y espero me puedan ayudar.

Un poco de contexto: Hace tiempo buscaba un shoutbox, no encontré ninguno que me agradara, y el que me agradaba no funcionaba en PHP5 así que decidí crearme el mío basandome en el estilo de shoutmix.com del cual tengo uno a punto de expirar Gran sonrisa y hasta ahorita todo bien, dicho sea de paso, me ayudarían mucho si pudiesen probarlo y si quieren/pueden reportarme los errores que vean, se los agradecería.

[spoiler]http://www.infernalblackmetal.com.ar/shout/[/spoiler]

En fin, al grano.

Tengo dos tablas:

Código:
+----------------------------------------------+
| Tabla: shoutbox                              |
+----+------+-------+-----+---------+----------+
| id | name | email | web | comment | datetime |
+----+------+-------+-----+---------+----------+

+-----------------------------------+
| Tabla: users                      |
+----+------+------+-----+----------+
| id | name | pass | email | avatar |
+----+------+------+-----+----------+

Y mi consulta, junto con la implementación, es esta:

Código PHP:
<?php
require_once 'config.php';
require_once 
'functions.php';
connect_to_db();

$sql 'SELECT * FROM '.DB_TABLE.' ORDER BY id DESC';
$result mysql_query($sql);

while(
$rows=mysql_fetch_array($result)){
?>
<div class="shout-wrapper" id="shout<?php echo $rows['id']; ?>">
<div class="author">
<?php
    
echo $rows['name'];
    if(!(!
$rows['email']) || !(!$rows['web'])){
        echo 
' <span class="links">[ ';
    }
    if(!(!
$rows['email'])){
        echo 
'<a href="mailto:'.$rows['email'].'">Email</a>';
    }
    if(!(!
$rows['email']) && !(!$rows['web'])){
        echo 
' | ';
    }
    if(!(!
$rows['web'])){
        if(!(!
filter_var($rows['web'], FILTER_VALIDATE_URL))){
            echo 
'<a href="away.php?u='.urlencode($rows['web']).'" target="_blank" title="'.$rows['web'].'" rel="nofollow">Web</a>';
        }
    }
    if(!(!
$rows['email']) || !(!$rows['web'])){
        echo 
' ]</span>';
    }
?>
</div>
<div class="shout clearfix"><?php echo parse_urls($rows['comment']); ?></div>
<div class="date"><?php echo $rows['datetime']; ?></div>
</div>
<?php
}
mysql_close();
?>
</div> 

Y todo bien, pero me gustaría unir las dos tablas en una sola consulta, para poder imprimir el avatar del usuario (de la tabla "users") con:

Código PHP:
$rows['avatar'

Intenté con la siguiente consulta:

Código PHP:
$sql 'SELECT * FROM '.DB_TABLE.' UNION ALL SELECT * FROM '.USR_TABLE.' ORDER BY id DESC'

Pero siempre obtengo un error (ver imágen adjunta), entonces mi pregunta es: cómo puedo unir las dos tablas en uns sola consulta? o en su defecto, como corrigo ese bendito error? Gran sonrisa

   

Se los agradeceré eternamente.
WWW
#2
Código:
SELECT shoutbox.*, users.nick, users.avatar FROM shoutbox LEFT JOIN users ON shoutsbox.author = users.id
En la tabla shoutbox deberías guardar el ID de su autor en un campo (`author`, por ejemplo) en vez de guardar el nick en sí (por la fila "name" presupongo que así lo haces).

Te recomiendo googlear bien lo que es hacer JOINs en las consultas.

Espero que te sirva, saludos.
"Digo lo que pienso y cargaré con la culpa, piensa lo que digo y quédate con la disculpa" ♫
#3
(02-12-2012, 12:35 AM)ouch01 escribió:
Código:
SELECT shoutbox.*, users.nick, users.avatar FROM shoutbox LEFT JOIN users ON shoutsbox.author = users.id
En la tabla shoutbox deberías guardar el ID de su autor en un campo (`author`, por ejemplo) en vez de guardar el nick en sí (por la fila "name" presupongo que así lo haces).

Te recomiendo googlear bien lo que es hacer JOINs en las consultas.

Espero que te sirva, saludos.

Oh, gracias, aunque hace tiempo lo solucioné Gran sonrisa

Guardo el nombre, email y web en la tabla shoutbox porque también pueden comentar anónimamente y sólo en caso de estar registrados lo tomo de la tabla users junto con sus demás datos, pero eso es aparte.

Lo que usé (por si en un futuro a alguien le sirve):

Tablas:
Código:
+----------------------------------------------------+
| Tabla: shoutbox                                    |
+----+------+-------+-----+---------+----------+-----+
| id | name | email | web | comment | datetime | uid |
+----+------+-------+-----+---------+----------+-----+

+-----------------------------------+
| Tabla: users                      |
+----+------+------+-----+----------+
| id | name | pass | email | avatar |
+----+------+------+-----+----------+

Código PHP:
$slq 'SELECT a.name,a.email,a.web,a.comment,a.datetime,a.uid,b.avatar FROM shoutbox AS a INNER JOIN users AS b ON a.uid = b.id LIMIT 15'
WWW
#4
Me falta mucho por aprender por lo que veo... Igual, Ouch, Eres mi ídolo ! (?) Saludos! Sonrisa


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  [Duda] Consulta para los que saben de programacion CarlosAlberto 3 411 26-03-2016, 01:39 PM
Último mensaje: CarlosAlberto
  [Duda] ¿Cómo tener tablas personalizadas en PHPMyAdmin? Kevin9908 3 267 01-07-2015, 05:06 PM
Último mensaje: Juliens
  [Consulta] Sentencias básicas SQL alberto_es 2 336 13-03-2015, 11:42 PM
Último mensaje: alberto_es
  Javascript - Tablas Automáticas AlanFreak 5 796 04-10-2014, 03:01 PM
Último mensaje: Gonzalo
  Consulta -Como llamo un texto de un archivo a otro (index.php) PHP andrex.nava 8 853 16-07-2013, 11:10 PM
Último mensaje: Dark Neo
  [Consulta] Script que usa el foro de Skylium DiosOne 6 580 13-06-2013, 05:11 PM
Último mensaje: papi
  Codigo JAVA [Tablas de Multiplicar 1-10 (sentencia while)] ~ [JAVA - POO] givered 3 2,997 17-04-2013, 07:03 AM
Último mensaje: frikilero
  Consulta zonecrozz 1 552 15-02-2012, 12:38 PM
Último mensaje: Juliens
  Consulta SQL j3ck95 5 1,014 24-09-2011, 12:06 PM
Último mensaje: papi
  [Consulta] Enviar correos desde web y que llegen en html Maximo 7 940 07-09-2011, 01:51 PM
Último mensaje: edupsi



Usuarios navegando en este tema: 1 invitado(s)