SQL - Consulta SQL (Reto)

   
Vista:
Imágen de perfil de Isaac Daniel

Consulta SQL (Reto)

Publicado por Isaac Daniel (8 intervenciones) el 09/06/2017 18:29:48
Buenas a todos

Pues resulta que tengo una consulta con un poco de complejidad y quisiera saber si me puede echar la mano a sacar la ultima parte que es la que tiene un poco mas de complegidad

Tengo las siguentes 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
27
28
29
30
31
32
33
34
35
mysql> select * from emociones;
+------------+----------------+
| id_emocion | nombre_emocion |
+------------+----------------+
|          1 | Enojo          |
|          2 | Disgusto       |
|          3 | Miedo          |
|          4 | Felicidad      |
|          5 | Tristeza       |
|          6 | Sorpresa       |
|          7 | Me gusta       |
|          8 | Share          |
+------------+----------------+
8 rows in set (0.00 sec)
 
 
mysql> select * from votos;
+---------+-----------+------------+------------+-------+-------+-------+----------------+---------------+
| id_voto | id_imagen | id_usuario | id_emocion | otro1 | otro2 | otro3 | fecha_registro | hora_registro |
+---------+-----------+------------+------------+-------+-------+-------+----------------+---------------+
|       1 |         1 |         17 |          4 | temor |       |       | 2017-02-01     | 05:39:34      |
|       2 |         1 |         17 |          6 | temor |       |       | 2017-02-01     | 05:39:34      |
|       3 |         1 |         17 |          7 | temor |       |       | 2017-02-01     | 05:39:34      |
|       4 |         2 |         17 |          4 |       |       |       | 2017-02-01     | 05:39:54      |
|       5 |         2 |         17 |          7 |       |       |       | 2017-02-01     | 05:39:54      |
|       6 |         3 |         17 |          5 |       |       |       | 2017-02-01     | 07:16:35      |
|       7 |         4 |         17 |          1 |       |       |       | 2017-02-01     | 08:26:25      |
|       8 |         5 |         17 |          4 |       |       |       | 2017-02-02     | 08:34:10      |
|      35 |         5 |         46 |          7 |       |       |       | 2017-02-15     | 12:39:45      |
|      36 |         6 |         46 |          6 |       |       |       | 2017-02-15     | 12:40:01      |
|      37 |         1 |         49 |          2 | salud |       |       | 2017-02-15     | 14:12:20      |
|      38 |         1 |         49 |          6 | salud |       |       | 2017-02-15     | 14:12:20      |
|      39 |         2 |         49 |          2 |       |       |       | 2017-02-15     | 14:12:33      |
|      40 |         2 |         49 |          7 |       |       |       | 2017-02-15     | 14:12:33      |
+---------+-----------+------------+------------+-------+-------+-------+----------------+---------------+


La consulta trata de sacar el siguiente resultado
1
2
3
4
5
6
+--------------------+------------------------+
|      correo        |         emociones      |
+--------------------+------------------------+
| correo@usuario.com | Enojo, Miedo, Trizteza |
| correo2@correo.com | Me gusta, Sorpresa     |
+--------------------+------------------------+

El problema es que no puedo sacar las emociones en una sola fila con una sola consulta.

Alguién sabe como la puedo sacar ?

De momento la consulta va así:
1
2
3
4
5
SELECT u.correo AS correo, i.id_imagen as 'Bacon ID', e.nombre_emocion
FROM votos v
INNER JOIN usuarios u on v.id_usuario = u.id_usuario
INNER JOIN imagenes i on v.id_imagen = i.id_imagen
INNER JOIN emociones e ON v.id_emocion = e.id_emocion


Saludos y agradecimientos eternos.

PD: Si me sale la consulta detodos modos la posteare para que otras personas puedan ver como se resolvio este problema.
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
Imágen de perfil de Isaac Daniel

Consulta SQL (Reto)

Publicado por Isaac Daniel (8 intervenciones) el 09/06/2017 18:47:30
Veo que esta por demas un inner, entonces queda:
1
2
3
4
SELECT u.correo AS correo, v.id_imagen AS 'Bacon ID', e.nombre_emocion AS Emocion
FROM votos v
INNER JOIN usuarios u ON v.id_usuario = u.id_usuario
INNER JOIN emociones e ON v.id_emocion = e.id_emocion
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

Consulta SQL (Reto)

Publicado por leonardo_josue (1138 intervenciones) el 09/06/2017 19:05:29
Hola Isaac:

Te faltó incluir las tablas de imágenes y usuarios en tu ejemplo, por lo que es complicado darte una respuesta puntual, sin embargo, te comento que lo que quieres hacer lo puedes lograr con la función GROUP_CONCAT de MySQL:

https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html

Sería algo así:

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
mysql> SELECT * FROM tabla;
+---------+----------------+
| persona | nombre_emocion |
+---------+----------------+
| hugo    | Miedo          |
| hugo    | Felicidad      |
| hugo    | Me gusta       |
| paco    | Share          |
| paco    | Sorpresa       |
| paco    | Tristeza       |
| luis    | Me gusta       |
+---------+----------------+
7 rows in set (0.00 sec)
 
mysql> SELECT persona, GROUP_CONCAT(nombre_emocion)
    -> FROM tabla
    -> GROUP BY persona;
+---------+------------------------------+
| persona | GROUP_CONCAT(nombre_emocion) |
+---------+------------------------------+
| hugo    | Miedo,Felicidad,Me gusta     |
| luis    | Me gusta                     |
| paco    | Share,Sorpresa,Tristeza      |
+---------+------------------------------+
3 rows in set (0.00 sec)

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Isaac Daniel

Consulta SQL (Reto)

Publicado por Isaac Daniel (8 intervenciones) el 09/06/2017 19:13:58
En efecto @leonardo_josue. Es correcto lo que dices:

Justo es lo que estaba leyendo

La consulta queda de la suguiente manera
1
2
3
4
5
SELECT u.correo AS correo, v.id_imagen AS 'Bacon ID', GROUP_CONCAT(v.id_emocion SEPARATOR ',') as 'Emocion'
FROM votos v
INNER JOIN usuarios u ON v.id_usuario = u.id_usuario
INNER JOIN emociones e ON v.id_emocion = e.id_emocion
GROUP BY u.correo, v.id_imagen


Gracias por la ayuda. Queda resuelto el problema
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
Revisar política de publicidad