PHP - extraer datos de tabla sólo si otra tabla cumple condición

 
Vista:

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por Julián (15 intervenciones) el 16/01/2018 03:32:15
Qué tal? espero que estén bien.
En este caso vengo a pedir ayuda, ya que no logro encontrar en algún foro la manera de hacer esto.
Lo que hice fue un sistema para que en mi aplicacion, 2 usuarios registrados puedan seguirse o interactuar entre sí. Lo que tengo que hacer ahora es que si mi $_SESSION['id] sigue a tal usuario, pueda ver las publicaciones que creó.
Probé de esta manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
$id = $_SESSION['ID'];
#buscar todos los id de la tabla usuarios:
$busca=mysqli_query($link, "SELECT usuarios from id");
#mientras se encuentren usuarios tomaremos los id
while ($filoide=mysqli_fetch_row($busca)) {
#ahora mediante el query seleccionamos todo de la tabla pub DONDE usru_id sea mi session y usro_id sea el arreglo de todos los id que se encuentren. 
$busqueda=mysqli_query($link, "SELECT * from pub where (select * from follows where usru_id ='$id' AND usro_id='$filoide')");
}
#por cada coincidencia, se crearan 2 objetos, el h1 con el usuario(arroba) del usuario y el texto de su publicacion
while ($filovich=mysqli_fetch_row($busqueda)) {
echo "<h1 class='user' id='user-pub'>".$filovich['arroba']."</h1>";
echo "<p>".$filovich['texto']."</p>";
}
Bien, cuando me dije qué es lo que probé, me refería a la sig línea:
1
$busqueda=mysqli_query($link, "SELECT * from pub where (select * from follows where usru_id ='$id' AND usro_id='$filoide')");

ya que creo que es la que no funciona. Quisiera que me digan por favor como manejar la situación ya que soy novato y no sé mucho... GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 604
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por Miguel (218 intervenciones) el 16/01/2018 15:13:13
Pues eso dependería de la estructura de tus tablas, aunque más o menos debería ir así:

1
SELECT * FROM publicaciones WHERE publicaciones.id_usuario IN (SELECT seguidores.id_seguidor FROM seguidores WHERE seguidores.id_usuario='usuario-sesion-actual') AND DATE(publicaciones.fecha_publicacion) = CURDATE() ORDER BY publicaciones.id LIMIT = 100
(la query hace una consulta de las últimas 100 publicaciones del día, correspondientes a todos los usuarios que sigue)

Tomando en cuenta que:

publicaciones: es la tabla que contiene los posts

publicaciones.id: es el id auto-generado para el registro

publicaciones.id_usuario: es el campo que guarda el id del usuario que realizó el post

publicaciones.fecha_publicacion: es el campo que guarda la fecha de la creación del post


seguidores: es la tabla que contiene las relaciones de los usuarios que se siguen

seguidores.id_usuario: es el campo que guarda el id del usuario que hará el seguimiento

seguidores.id_seguidor: es el campo que guarda el id del usuario al que se le hará seguimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por Julián (15 intervenciones) el 16/01/2018 23:08:28
Hola, te agradezco por responder el post. Te digo que entendí lo que me sugeriste, pero cambiándole a las variables reales, no me está funcionando. Cuando puse tu ejemplo en algunas partes me aparecían las letras en color morado como si estuviesen "mal" o le faltasen algo.

Quedó así:
1
2
3
4
5
6
7
8
$busca=mysqli_query($link, "SELECT usuarios from id");
while ($filoide=mysqli_fetch_row($busca)) {
$busqueda=mysqli_query($link, "SELECT * FROM publicaciones WHERE tuits.ID_user IN (SELECT follows.$filoide FROM follows WHERE follows.usru_id='$id') AND DATE(tuits.hora) = CURDATE() ORDER BY tuits.ID LIMIT = 100");
}
while ($filovich=mysqli_fetch_row($busqueda)) {
echo "<h1 class='user' id='user-tuit'>".$filovich['arroba']."</h1>";
echo "<p>".$filovich['texto']."</p>";
}
Supongo que pensé mal el sistema, voy a desarrollarlo mentalmente y rehacerlo. Ahora, si podés explicarme un poquito más, yo sólo sé los comandos básicos de mysql, "SELECT", "FROM", "WHERE" y "AND". pero "IN", "AND DATE", "CURDATE" "ORDER BY", "LIMIT". No sé qué son. Si me explicás sería genial, y si no gracias igual por ayudarme en lo principal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Georkis
Val: 75
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por Georkis (32 intervenciones) el 17/01/2018 16:05:12
Hola, puedes hacerlo más sencillo, haciendo una tabla en la base de dato... por ejemplo mucho a mucho

tabla o entidad... yo manejos entidades... bueno el caso es lo mismo

entidad Usuario
entidad seguir_usuario


algo asi, maneja todo con tablas....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo
Val: 920
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por italo (150 intervenciones) el 17/01/2018 20:42:59
hola, antes de lanzarte en php, debes de modelar bien tus tablas...

haria algo asi (como aconsejaron usaria una tabla n:n)

create de las tablas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
create table usuario (
id int(5) primary key AUTO_INCREMENT,
userid varchar(20) NOT NULL,
password varchar(20) NOT NULL,
nombre varchar(50) NOT NULL
);
 
create table publicacion (
id int(5) primary key AUTO_INCREMENT,
id_usuario_autor int(5) NOT NULL,
titulo varchar(150) NOT NULL,
contenido varchar(2000) NOT NULL,
fecha DATE NULL,
hora TIME NULL,
foreign key (id_usuario_autor) references usuario(id)
);
 
create table seguimiento (
id int(5) primary key AUTO_INCREMENT,
id_usuario_sigue int(5) NOT NULL,
id_usuario_seguido int(5) NOT NULL,
fecha DATE NULL,
hora TIME NULL,
foreign key (id_usuario_sigue) references usuario(id),
foreign key (id_usuario_seguido) references usuario(id)
);

insert de los datos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 1. insert en la tabla usuario
INSERT INTO `usuario` (`id`, `userid`, `password`, `nombre`) VALUES (1, 'hugo', '12345678', 'hugo_nombre');
INSERT INTO `usuario` (`id`, `userid`, `password`, `nombre`) VALUES (2, 'paco', '12345678', 'paco_nombre');
INSERT INTO `usuario` (`id`, `userid`, `password`, `nombre`) VALUES (3, 'luis', '12345678', 'luis_nombre');
INSERT INTO `usuario` (`id`, `userid`, `password`, `nombre`) VALUES (4, 'mcpato', '12345678', 'mcpato_nombre');
 
-- 2. insert en la tabla publicacion
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (1, 1, 'tarea de hugo', 'mi tarea es quitarle mucho dinero a mi tio mc pato', '2018-01-17', '19:00:05');
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (2, 2, 'tarea de paco', 'mi tarea es quitarle casi todo el dinero a mi tio mc pato', '2018-01-17', '19:03:57');
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (3, 3, 'tarea de luis', 'mi tarea es quitarle poco dinero a mi tio mc pato', '2018-01-17', '19:04:32');
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (4, 4, 'tarea de mcpato', 'mi tarea es conseguirme una pata patona', '2018-01-17', '19:05:29');
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (5, 2, 'tarea de paco 2', 'mi segunda tarea es no quemarme la trompa', '2018-01-17', '19:09:32');
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (6, 1, 'tarea de hugo 2', 'mi segunda tarea es tener 3 patas', '2018-01-17', '20:15:02');
INSERT INTO `publicacion` (`id`, `id_usuario_autor`, `titulo`, `contenido`, `fecha`, `hora`) VALUES (7, 4, 'tarea de mcpato 2', 'mi segunda tarea es denunciar a la disney', '2018-01-17', '20:15:38');
 
-- 3. insert en la tabla seguimiento
INSERT INTO `seguimiento` (`id`, `id_usuario_sigue`, `id_usuario_seguido`, `fecha`, `hora`) VALUES (1, 1, 4, '2018-01-17', '19:06:00');
INSERT INTO `seguimiento` (`id`, `id_usuario_sigue`, `id_usuario_seguido`, `fecha`, `hora`) VALUES (2, 3, 4, '2018-01-17', '19:06:18');
INSERT INTO `seguimiento` (`id`, `id_usuario_sigue`, `id_usuario_seguido`, `fecha`, `hora`) VALUES (3, 2, 1, '2018-01-17', '19:06:34');
INSERT INTO `seguimiento` (`id`, `id_usuario_sigue`, `id_usuario_seguido`, `fecha`, `hora`) VALUES (4, 2, 4, '2018-01-17', '19:10:26');
INSERT INTO `seguimiento` (`id`, `id_usuario_sigue`, `id_usuario_seguido`, `fecha`, `hora`) VALUES (5, 4, 1, '2018-01-17', '20:17:18');

por ejemplo, una vez que has cargado los datos...

para ver solo las publicaciones de los autores que paco (id 2) sigue: (el resultado en la imagen)

1
2
3
4
5
6
select s.id_usuario_sigue id_usuario_sigue, s.id_usuario_seguido id_usuario_seguido, p.id_usuario_autor id_usuario_autor, p.titulo titulo, p.contenido contenido
from usuario u, publicacion p, seguimiento s
where s.id_usuario_sigue = 2 -- session_php_usuario_logueado
and p.id_usuario_autor = u.id
and u.id = s.id_usuario_seguido
;

adaptalo a tu php, si tienes dudas preguntas.

salud2

select_publicaciones_seguidos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por Julian (15 intervenciones) el 17/01/2018 23:14:51
Gracias gracias gracias y muchas gracias por tu tiempo, en un rato voy a probar lo que me dijiste, gracias por explicación y consejo. Personas como vos faltan en el mundo xD, en serio. Me voy a registrar sólamente para darte puntaje.
En un rato lo pruebo y te comento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por Julián (15 intervenciones) el 18/01/2018 17:58:19
Funcionó a la perfección, para los que tengan la misma duda, haciéndolo de la forma de italo todo va a funcionar. Así me quedó a mí.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
#VAMOS A RECORRER TODOS LOS ID QUE EXISTAN EN LA TABLA USUARIOS.
$id = $_SESSION['id'];
$id_completo = mysqli_query($link, "SELECT id FROM usuarios");
$filasID=mysqli_fetch_row($id_completo);
 
$querynuevo= mysqli_query($link, "SELECT s.usru_id usru_id, s.usro_id usro_id, p.ID_user ID_user, p.arroba arroba, p.texto texto
from usuarios u, tuits p, follows s
where s.usru_id = '$id' -- session_php_usuario_logueado
and p.ID_user = u.id
and u.id = s.usro_id
");
 
while ($filoides = mysqli_fetch_array($querynuevo)) {
echo "tuit id " . $filoides['ID'] . "<br>";
echo "tuit usuario id: " . $filoides['ID_user']. "<br>";
echo "arroba del id del tuit:" . $filoides["arroba"];
echo "<br>";
echo "CONTENIDO: ". $filoides["texto"] . "<br>";
echo "------------------------------------------------- <br>";
}
 
 
 ?>
Gracias a todos por responder y ayudarme. Hoy aprendí algo nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo
Val: 920
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

extraer datos de tabla sólo si otra tabla cumple condición

Publicado por italo (150 intervenciones) el 18/01/2018 19:16:01
hola, que bueno que te funcione, si deseas tener los resultado en una tabla html, prueba asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
 
/**
 * 
 * 
 */
 
//VAMOS A RECORRER TODOS LOS ID QUE EXISTAN EN LA TABLA USUARIOS.
$id_completo = mysqli_query($link, "SELECT id FROM usuarios");
$filasID=mysqli_fetch_row($id_completo);
 
//'$id' -- session_php_usuario_logueado
$id = $_SESSION['id'];
 
$querynuevo= mysqli_query($link, "SELECT s.usru_id usru_id, s.usro_id usro_id, p.ID_user ID_user, p.arroba arroba, p.texto texto from usuarios u, tuits p, follows s where s.usru_id = '$id' and p.ID_user = u.id and u.id = s.usro_id");
 
?>
 
<table>
    <thead>
        <tr>
            <th>tuit id</th>
            <th>tuit usuario id</th>
            <th>arroba del id del tuit</th>
            <th>CONTENIDO</th>
        </tr>
    </thead>
    <tbody>
<?php
    while ($filoides = mysqli_fetch_array($querynuevo)) {
?>
    <tr>
        <td><?php echo $filoides['ID'];?></td>
        <td><?php echo $filoides['ID_user'];?></td>
        <td><?php echo $filoides['arroba'];?></td>
        <td><?php echo $filoides['texto'];?></td>
    </tr>
<?php
    }
?>
    </tbody>
</table>

aunque nose en tu caso de donde sale $filoides['ID'], ya que no lo seleccionas en la query...

salud2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar