MySQL - Consulta Avanzada!

 
Vista:
Imágen de perfil de miguel
Val: 10
Ha disminuido su posición en 9 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta Avanzada!

Publicado por miguel (6 intervenciones) el 02/10/2017 20:35:10
Hola a todos tengo una duda ojala me puedan ayudar:

Tengo una tabla PRODUCTO, SUSTANCIA Y UNA DET_PROD-SUS ya que es una relacion muchos a muchos
el detalle es que cuando quiero ver las sustancias que pertenecen a un solo producto ejemplo N383-0977
Me aparece este resultado:

N383-0977 dimethylacetamide
N383-0977 calcium
N383-0977 carbon black

Segun yo es un resultado correcto

pero yo quisiera lograr que la consulta me arroje algo asi:

N383-0977 dimethylacetamide
--------------- calcium
---------------- carbon black

No se si se pueda lograr de alguna manera a lo mejor estoy en el foro incorrecto y es que mis productos suelen tener muchas sustancias y suele ser molesto mirar que la informacion se repita tanto ya que muestro muchos campos mas que son necesarios ....ojalan pudieran ayudarme
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 xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta Avanzada!

Publicado por xve (1151 intervenciones) el 03/10/2017 09:11:27
Hola Miguel, según entiendo, la consulta SQL te devolverá el campo vinculante, es decir la referencia, pero luego en tu programa, tu decides como mostrar el resultado. hasta donde yo se, la columna de la referencia te vendrá, vació a con valor, pero la columna no la puedes poner solo para el primer registro por ejemplo.
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta Avanzada!

Publicado por leonardo_josue (414 intervenciones) el 03/10/2017 19:00:50
Hola Miguel:

Tal como lo comenta xve, esto que quieres hacer es más bien trabajo para un lenguaje de programación, sea cual sea que estés utilizando, pero también hay algunos "trucos" que puedes aplicar con SQL, aunque no los recomiendo. Una idea podría ser así, supongamos que tienes esta tabla;

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT campo1, campo2 FROM tabla;
+--------+--------+
| campo1 | campo2 |
+--------+--------+
| uno    | 1.1    |
| uno    | 1.2    |
| uno    | 1.3    |
| uno    | 1.4    |
| dos    | 2.1    |
| dos    | 2.2    |
| dos    | 2.3    |
+--------+--------+
7 rows in set (0.00 sec)

El primer paso sería NUMERAR los registros para cada grupo, algo así como las función RANK o ROW_NUMBER de Oracle. la idea sería tener algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT indice, campo1, campo2 FROM tabla;
+--------+--------+--------+
| indice | campo1 | campo2 |
+--------+--------+--------+
|      1 | uno    | 1.1    |
|      2 | uno    | 1.2    |
|      3 | uno    | 1.3    |
|      4 | uno    | 1.4    |
|      1 | dos    | 2.1    |
|      2 | dos    | 2.2    |
|      3 | dos    | 2.3    |
+--------+--------+--------+
7 rows in set (0.00 sec)

OJO: hay muchas formas de hacer esto, pero para cuestiones del ejemplo no estoy poniendo el un ejemplo, puedes checar esta página para ver algunas formas de "simular" esta numeración:

https://stackoverflow.com/questions/1895110/row-number-in-mysql

entonces, con estos registros podrías hacer algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT IF(indice = 1, campo1, '') campo, campo2
    -> FROM
    -> ( SELECT indice, campo1, campo2 FROM tabla) T
    -> ORDER BY campo1, indice;
+-------+--------+
| campo | campo2 |
+-------+--------+
| uno   | 1.1    |
|       | 1.2    |
|       | 1.3    |
|       | 1.4    |
| dos   | 2.1    |
|       | 2.2    |
|       | 2.3    |
+-------+--------+
7 rows in set (0.00 sec)

Pero esto insisto no es la mejor forma de hacerlo.

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 kip
Val: 98
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta Avanzada!

Publicado por kip (30 intervenciones) el 03/10/2017 19:13:08
O podria hacer algo con GROUP_CONCAT tambien:

1
2
3
4
5
6
7
8
9
mysql> SELECT indice AS 'Indice', GROUP_CONCAT(valor) AS 'Valores'
    -> FROM tabla
    -> GROUP BY indice;
+--------+-----------------------+
|Indice  | Valores               |
+--------+-----------------------+
|  uno   | 1.1, 1.2, 1.3, 1.4    |
|  dos   | 2.1, 2.2, 2.3         |
+--------+-----------------------+
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de miguel
Val: 10
Ha disminuido su posición en 9 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta Avanzada!

Publicado por miguel (6 intervenciones) el 10/10/2017 15:48:47
jaja es lo que busco pero como dices no se si sea la mejor manera, ya que la quiero para una busqueda :/ aun asi la probare muchas garcias por tu respuesta fue buena!
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