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 (10 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

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

Publicado por Miguel (204 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 (10 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

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

Publicado por Georkis (29 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

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

Publicado por italo (91 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 (10 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 (10 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

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

Publicado por italo (91 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