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 originalmysql
> SELECT id
, id_PADRE
, Texto
, familia
-> WHERE p2.id_PADRE
= - 1 AND p2.familia
= 2 -> SELECT id
, id_PADRE
, TExto
, familia
-> (SELECT p1.id
, p1.id_PADRE
, p1.Texto
, p1.familia
-> WHERE p2.id_PADRE
= - 1 AND p2.familia
= 2) +----+----------+--------------+---------+
| id | id_PADRE | Texto | familia |
+----+----------+--------------+---------+
| 4 | -1 | camisa | 2 |
| 5 | 4 | camisa azul | 2 |
| 8 | 4 | camisa verde | 2 |
+----+----------+--------------+---------+
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.