Comunidad de diseño web y desarrollo en internet online

Consulta sql a duna tabla y respuesta de dos tablas :?

Citar            
MensajeEscrito el 20 Ago 2010 07:57 pm
buenas! tengo un problema al realizar una consulta sql.

Necesito obtener en la consulta resultados de dos tablas... pero con comparacion en base al id de la primer tabla.

Por ejemplo.. en una tabla tengo mensajes de usuarios ID | MENSAJE | ID_USER y la otra tabla tiene los usuarios donde necesito obtener ademas datos del usuario ID_USER como por ejemplo IMAGEN | EMAIL | NOMBRE .

Es complicado de explicar pero basicamente necesito hacer una consulta de la tabla Mensajes obteniendo los 10 mas vistos y en base a esa consulta necesito obtener el mensaje de esa tabla y los datos del usuario que se identifica con el id en la primer tabla... pero que estan en la tabla 2
uff.. espero se entienda.

Cualquier maestro SQL... agradezco respuestas

Por pixelismo

27 de clabLevel



Genero:Masculino  

Olivos, Buenos Aires

chrome
Citar            
MensajeEscrito el 20 Ago 2010 08:48 pm
Pues podria ser ASI:

OPCION 1

Código MySQL :

SELECT 
  Id,
  mensaje,
  (SELECT nombre FROM usuarios WHERE Id=Id_user) AS nombre,
  (SELECT imagen FROM usuarios WHERE Id=Id_user) AS imagen,
  (SELECT email FROM usuarios WHERE Id=Id_user) AS email
FROM
  mensajes
WHERE
  {aqui coloca tus condiciones}
;


OPCION 2

Código MySQL :

SELECT
  t1.Id,
  t1.mensaje,
  t2.nombre,
  t2.email,
  t2.imagen
FROM
  mensajes AS t1,
  usuarios AS t2
WHERE
  t2.Id=t1.Id_user;

Esas podrian ser 2 de las posibles solucioens por ahi seguro te ofrecen otra, se que hay una con JOIN o JOIN LEFT pero la verdad el JOIN no se me da muy bien así que te pongo lo que a mi personalmente me funciona xD Pruebalas y de ahi nos cuentas como te fue.

COPY, PASTE, PLAY AND ENJOY

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 20 Ago 2010 09:38 pm
Neo! genial! estoy casi seguro que eso es lo que necesito.. ya lo estoy testeando pero por ahora sin exito...te pego el php completoa ver si encontras algun error estupido que yo no veo :) la idea es que me genere un xml con 10 items.
Yo sigo investigando los otros ejemplos que me pasaste a ver si lo logro.
Un abrazo y mil gracias

Código :


<?php
include_once ("conexion.php");
$result= mysql_query ("SELECT notes.user_id, notes.note, notes.read, users.user_name, users.avatar FROM note AS notes, user_name AS users WHERE users.username=notes.user_id");


echo"<?xml version='1.0'?>
";
while($row = mysql_fetch_array($result)) {echo '
<option mensaje="' . $row["notes.note"]. '" usuario="'. $row["users.username"].'"/>
';
}
mysql_free_result($result);
echo "</select>
";
?>

Por pixelismo

27 de clabLevel



Genero:Masculino  

Olivos, Buenos Aires

chrome
Citar            
MensajeEscrito el 20 Ago 2010 09:59 pm
Para hacertela mas raido a mi y a ti te lo ponder como yo lo haria con los datos que me das

Código PHP :

<?php
require_once('conexion.php'); 
/* pongo require y no include porque requiere arroja ERROR FATAL si no encuetnra el archivo el cual en este caso es vital */
$q_M   =   "SELECT notes.user_id, notes.note, notes.read, users.user_name, users.avatar FROM note AS notes, user_name AS users WHERE users.username=notes.user_id ";
$M   =   mysql_query() or die ("No se pudo recuperara la lista solicitada.<br/>MySQL dijo:<br/>".mysqlerror()."<br/>Usted indico a MySQL: ".htmlentities($q_M));
/* Con eso ejecutas la sentencia que definiste en $q_M y ademas si hay error el die() termina script e imprime lo que pusiste dentro de los () en este caso una cadena que me indica que no pudo recuperar la lista seguida del error del myql y por ultimo toda la sentencia tal cual se envio a MySQL, usamos htmlentities() por si usamos un simbolo > o < o algun caracter que peuda ser interpretado como etiqueta para que lo muestre y no lo ejecute */
$r_M   =   mysql_fetch_assoc($M);
/* Personalmente prefiero el uso de mysql_fetch_assos en vez de mysql_fetch_array */
$n_M   =   mysql_num_rows($M);
/* Esta linea nos indica el numero de resutlados arrojados por MySQL */
if ($n_M>0) {
/* Si hay más de 0 resultados */
   echo "<?xml version='1.0'?>";
   echo "<select>";
   do {
      echo   "<option mensaje=\"$r_M['notes.note']\" usuario=\"$r_M['users.username']\" />";
      /* Usamos \" para escapar el " ya asi sea interpretado como " y no como fin de cadena */
   } while ($r_M = mysql_fetch_assoc($M));
   echo "</select>";
} else {
   echo "<?xml version='1.0'?>";
   echo "No hay resultados para su consulta";
};
mysql_free_result($result);
/* En lo personal no uso este comando pero por ahí dicen que es una sana practica */
?>


En resumidas lineas eso debería funcionar para ti, tal cual esta, pruebalo y nos cuentas.

COPY, PASTE, PLAY AND ENJOY!!!

P.D. Maikel te alabo por fin funcionan los TAB en el TEXTAREA.

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 20 Ago 2010 10:04 pm
Para hacer lo que deseas solo tienes que aplicar un INNER JOIN de la siguiente forma:

Código MySQL :

select top 10 a.Cantidad_visitas,a.US_Mensaje, b.ID_User, b.Nombre, b.Email
from dbo.Mensaje a
    inner join dbo.Usuario b
    on a.ID_US_user = b.ID_User
order by a.Cantidad_visitas desc


El top 10 es el que permite que solo se muestren los primeros 10, y el order by, te va a mostrar esos resultados ordenados de mas a menos cantidad de visitas/lecturas.

:D :D

Por Flashacker

Claber

214 de clabLevel



Genero:Masculino  

Manila

firefox
Citar            
MensajeEscrito el 20 Ago 2010 11:03 pm
que significa el dbo?

Por pixelismo

27 de clabLevel



Genero:Masculino  

Olivos, Buenos Aires

chrome
Citar            
MensajeEscrito el 21 Ago 2010 03:49 am

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 21 Ago 2010 02:19 pm
Uf.. gracias por todas las respuestas... hay cosas que no me quedaron muy claras pero logre hacer lo que queria aunque n ose si de la manera correcta.

esto me genera el xml con los datos que necesito sacando el mensaje de la tabla mensajes y en base al id me busca los datos del autor en la tabla users

Código :


$result= mysql_query ("SELECT * FROM notes INNER JOIN users ON notes.user_id = users.ID");


echo"<?xml version='1.0'?>
<select project='xmldata' date='11/20/2004'>";
   while($row = mysql_fetch_array($result)) {
      echo '
<option mensaje="' . $row["note"]. '" usuario="'. $row["username"]. '" imagen="'. $row["avatar"]. '" email="'. $row["email"].'"/>
';
}
mysql_free_result($result);
echo "</select>
";




Muchas gracias gente

Por pixelismo

27 de clabLevel



Genero:Masculino  

Olivos, Buenos Aires

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.