Foros del Web » Programando para Internet » PHP »

Dos consultas relacionadas a MySQL

Estas en el tema de Dos consultas relacionadas a MySQL en el foro de PHP en Foros del Web. Hola a todos, estoy creando un sistema de usuarios con la opción de que los usuarios se sigan entre ellos. Para esto tengo una tabla ...
  #1 (permalink)  
Antiguo 07/10/2010, 13:26
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Dos consultas relacionadas a MySQL

Hola a todos, estoy creando un sistema de usuarios con la opción de que los usuarios se sigan entre ellos. Para esto tengo una tabla en mysql con dos campos, 'from'(quien sigue) y 'to'(el seguido).

En otra tabla, tengo los mensajes que publican los usuarios y funciona más o menos como un muro. Los campos son 'id'(identificacion unica del mensaje para funciones como eliminar o ordenar), 'usuario' (quien publica el mensaje), 'to' (en que muro se publica), 'fecha' y 'mensaje'.

Bien, con la segunda tabla tengo este código que muestra los mensajes según se defina:

Código PHP:
<?php

function mostrar($user) {

$link mysql_connect("localhost""enric""enric");
mysql_select_db("votex"$link);

$result mysql_query("SELECT * FROM `muro` WHERE `to` LIKE '".$user."' ORDER BY `id` DESC"$link) or die(mysql_error());

while(
$row mysql_fetch_object($result)) {

$usuario $row->usuario;
$mensaje $row->mensaje;
$key $row->id;

echo 
'<table>
    <tr>
    <td>
        <table class="tabla" width="750px">
            <tr>
            <td><b>'
.$usuario.'</b> '.$mensaje;
            
if(
$_GET['user'] == false || $_GET['user'] == $_SESSION['k_username']) {
            echo 
'<br><div id="eliminar">
            <form name="form" action="muro/eliminar.php" method="get">
                <input type="hidden" name="num" value="'
.$key.'">
                <input type="submit" value="Eliminar">
            </form></div>'
; }
            echo
'
            </tr></td>
        </table>
    </tr></td>
<br>'
;

}
}
?>
Y querría hacer otra función que buscara a quién sigues, y luego buscar todos los mensajes que hubieran publicado estos intercalados con los que hayas publicado tu (ordenados por id, claro). Con qué código podría combinar estas dos consultas a MySQl?

Gracias por adelantado :)
  #2 (permalink)  
Antiguo 08/10/2010, 08:57
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Dos consultas relacionadas a MySQL

Hola 3, según entiendo, si tu id de mensaje responde a un orden cronológico, entonces bastaría con sacar los mensajes de A->B y los de B->A. Como se han ido insertando cronológicamente, saldrán cronologicamente ordenados por pantalla. Así, lo primero que se me ocurre es esto:

Código PHP:
SELECT *
FROM muro
WHERE muro
.to 2
    
AND muro.from 1 UNION SELECT *
                            
FROM muro
                            WHERE muro
.to 1
                                
AND muro.from 
Donde 1 y dos son dos usuarios de la aplicación.
No sé si entendí bien pruébalo a ver qué pasa. salu2
  #3 (permalink)  
Antiguo 08/10/2010, 10:48
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos consultas relacionadas a MySQL

Bueno, mas o menos era esto.. aunque yo quería hacer algo así:

Código PHP:
mysql_query("SELECT * FROM `muro`, `relationship` WHERE (`muro`.`usuario` LIKE `relationship`.`to`) ORDER BY `muro`.`id` DESC"$link) or die(mysql_error()); 
Ahora solo me falta que el usuario solo pueda ver los mensajes que hayan publicado los usuarios que sigue (asi se muestran todos). Cómo puedo hacerlo?
  #4 (permalink)  
Antiguo 08/10/2010, 12:33
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos consultas relacionadas a MySQL

Bueno, conseguí esto:
Código PHP:
<?php

$result 
mysql_query("

SELECT * 
FROM `muro`, `relationship` 
WHERE `muro`.`usuario` = `relationship`.`to` 
AND `relationship`.`from` = '"
.$_SESSION['k_username']."' 
OR `muro`.`usuario` = '"
.$_SESSION['k_username']."' 
ORDER BY `muro`.`id` DESC

"
$link) or die(mysql_error());
Y funciona casi a la perfección... pero me muestra los mensajes multiplicados por cinco (es decir, me muestra cinco veces seguidas el mismo mensaje). A que se debe??
  #5 (permalink)  
Antiguo 08/10/2010, 12:47
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Dos consultas relacionadas a MySQL

Si te muestra cinco veces cada uno es porque estás haciendo una multiplicación, tendría que ver las tablas pero prueba esto:

Código HTML:
SELECT DISTINCT * 
FROM `muro`, `relationship` 
WHERE `muro`.`usuario` = `relationship`.`to` 
AND `relationship`.`from` = '".$_SESSION['k_username']."' 
OR `muro`.`usuario` = '".$_SESSION['k_username']."' 
ORDER BY `muro`.`id` DESC
O ESTO:

Código HTML:
SELECT DISTINCT * 
FROM `muro` M
LEFT JOIN `relationship` R ON (M.`usuario` = R.`to`) AND (M.`from` = '".$_SESSION['k_username']."' 
OR M.`usuario` = '".$_SESSION['k_username']."') 
ORDER BY M.`id` DESC
a ver si marcha, saludos
  #6 (permalink)  
Antiguo 08/10/2010, 13:32
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos consultas relacionadas a MySQL

EDIT: ahora sí
Código PHP:
$result mysql_query("

SELECT DISTINCT * 
FROM `muro`
LEFT JOIN `relationship` ON (`muro`.`usuario` = `relationship`.`to`) AND (`relationship`.`from` = '"
.$_SESSION['k_username']."' 
OR `muro`.`usuario` = '"
.$_SESSION['k_username']."') 
ORDER BY `muro`.`id` DESC

"
$link) or die(mysql_error()); 
Gracias !!

Última edición por 3nr1c; 08/10/2010 a las 13:44
  #7 (permalink)  
Antiguo 08/10/2010, 14:13
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos consultas relacionadas a MySQL

Odio MySQL... ahora resulta que también coge los comentarios en los que los dos campos de la tabla 'relationship' son 'NULL', es decir, muestra todos los comentarios...

Supongo que deberia ser algo asi como

`relationship`.`to` IS NOT NULL

, pero lo he probado en el phpmyadmin y nada...
  #8 (permalink)  
Antiguo 09/10/2010, 04:58
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Dos consultas relacionadas a MySQL

Prueba esto:

Código PHP:
SELECT DISTINCT 
FROM `muro`
LEFT JOIN `relationshipON (`muro`.`usuario` = `relationship`.`to`) AND (`relationship`.`from` = '".$_SESSION['k_username']."' 
OR `muro`.`usuario` = '".$_SESSION['k_username']."'
WHERE `relationship`.`toIS NOT NULL 
ORDER BY 
`muro`.`idDESC 
supongo que habría que agregar en el WHERE AND `relationship`.`from` IS NOT NULL .
No utilices el phpmyadminm, es lento y no tiene practicamente ninguna herramienta, además mete ` y ' y otros caracteres. Prueba SQLyog o HeidiSQL. Si trabajas en linux te recomiendo utilizar el SQLYog desde Wine.
Un saludo,
  #9 (permalink)  
Antiguo 09/10/2010, 05:00
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos consultas relacionadas a MySQL

Perfecto, ahora sí. Gracias! :D

Y por cierto, uso el phpmyadmin porque es el que venía con XAMPP... Pero probaré estos dos que me dices! Gracias por la recomendación!
  #10 (permalink)  
Antiguo 09/10/2010, 05:22
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dos consultas relacionadas a MySQL

Más problemas... (es que no se van a acabar nunca??)

Ahora lo probé con un usuario al que le siguen dos( o más) usuarios y se muestran los mensajes propios una vez por usuario que le sigue.

Como lo soluciono?

Etiquetas: dos, mysql, relacionadas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:22.