Ver Mensaje Individual
  #13 (permalink)  
Antiguo 04/04/2016, 07:12
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Union de filas de parametros HIJOS

Cita:
Lo que necesito es en SQL si id_PADRE=-1 que busque las filas con id_PADRE=id
para que a continuación de la primera linea ponga:
Código:
id  id_PADRE  Texto             familia
5   4         camisa azul       2
8   4         camisa verde      2
En principio, lo que te propongo devuelve esos dos registros con precisión. Solo resta lo que dices al principio: Poner al padre también, pero al principio.
Pero para eso debes entender una cosa: Las condiciones de esas consultas son incompatibles, por lo que no hay una query simple para devolverte eso, debido a que MySQL no cuenta con consultas recursivas como las de Oracle.
Para lograr algo como lo que deseas simplemente debes hacer una combinación de las dos condiciones por medio de un UNION:

Código MySQL:
Ver original
  1. mysql> SELECT  id, id_PADRE, Texto, familia
  2.     -> FROM productos p2
  3.     -> WHERE p2.id_PADRE = - 1 AND p2.familia = 2
  4.     -> UNION ALL
  5.     -> SELECT id, id_PADRE, TExto, familia
  6.     -> FROM
  7.     ->     (SELECT p1.id, p1.id_PADRE, p1.Texto, p1.familia
  8.     ->     FROM productos p1
  9.     ->     WHERE id_padre IN (SELECT  id
  10.     -> FROM productos p2
  11.     -> WHERE p2.id_PADRE = - 1 AND p2.familia = 2)
  12.     -> ORDER BY p1.Texto) tabla2;
  13. +----+----------+--------------+---------+
  14. | id | id_PADRE | Texto        | familia |
  15. +----+----------+--------------+---------+
  16. |  4 |       -1 | camisa       |       2 |
  17. |  5 |        4 | camisa azul  |       2 |
  18. |  8 |        4 | camisa verde |       2 |
  19. +----+----------+--------------+---------+
  20. 3 rows in set (0.00 sec)

Tal vez te preguntes por qué esta query es mejor que la que propones tu. Bueno la respuesta es simple: PERFORMANCE.

No solo estoy obteniendo exactamente lo que se busca, sino que además la performance de un CASE en el SELECT, en el caso de MySQL, es baja, y empeora a medida que hay mas datos.

No siempre la consulta mas simple de escritura es la que posee mejor performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)