Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

consulta en mysql

Estas en el tema de consulta en mysql en el foro de Bases de Datos General en Foros del Web. Espero que podais echarme una manita. Tengo la siguiente tabla en mysql (idPadre, id, asunto,cuerpo.......) En esa tabla la relación que hay entre los registros ...
  #1 (permalink)  
Antiguo 07/08/2004, 20:16
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 6 meses
Puntos: 2
consulta en mysql

Espero que podais echarme una manita.

Tengo la siguiente tabla en mysql

(idPadre, id, asunto,cuerpo.......)

En esa tabla la relación que hay entre los registros es que todos los registros que tengan padre tendrán el id del padre en idPadre (obvio) y los que no tengan padre tendrán como idPadre el valor 0. Es decir hay padres e hijos (pero sólo hay dos niveles, un hijo no puede tener otro hijo)

Pues lo que quiero es que me saque todos registros con idPadre igual a 0 (padres) y que contengan cierta palabra en cuerpo. Es decir:

select asunto,campo from tabla where idPadre=0 and cuerpo like '%palabra%'

pero es que quiero que en la misma consulta me saque todos los registros que sean "padres" de registros que contengan esa palabra.Es decir, que si el registro con id 56 contiene la palabra que busco y tiene como idPadre el 27 me gustaría poder sacar el asunto y cuerpo del padre (el 27).

Sé que podría sacar los idpadre e ir haciendo una cosulta para cada uno pero lo que me gustaría es poder hacerlo todo de una vez si es posible.

Siento el tostón
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #2 (permalink)  
Antiguo 09/08/2004, 01:25
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Prueba con esto, creo que debería darte el resultado que buscas.
Código:
select a.* 
from tabla a left join tabla b on a.idPadre=b.idPadre
where a.idPadre=0 and (a.cuerpo like '%palabra%' or b.cuerpo like '%palabra%')
Un saludo.
  #3 (permalink)  
Antiguo 09/08/2004, 05:27
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 6 meses
Puntos: 2
Pero es que no existe la tabla b. En la misma tabla están los que tienen idPadre=0 y lo que no.

Muchas gracias por contestar
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #4 (permalink)  
Antiguo 09/08/2004, 06:12
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
¿No te has dado cuenta que a y b son alias y en ambos casos el nombre de la tabla es TABLA?. El sql lo he hecho así: sobre una única tabla, es decir cruzo la tabla "tabla" consigo misma, lo que pasa que necesitas usar los alias (en este caso "a" y "b") para poder poner las condiciones y no entrar en la ambigüedad.
Un saludo.
  #5 (permalink)  
Antiguo 09/08/2004, 06:18
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 6 meses
Puntos: 2
No me había fijado . Pues muchísmas gracias esta tarde lo pruebo y os cuento
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #6 (permalink)  
Antiguo 09/08/2004, 06:20
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 21 años
Puntos: 1
Funcionara esto?

Código:
SELECT asunto, campo
FROM tabla
WHERE ((idPadre = 0) and 
       (cuerpo like "%palabra%") ) or 
       (id = (SELECT idPadre
            FROM tabla
            WHERE ((idPadre = 0) and 
                   (cuerpo like "%palabra%") )))
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen

Última edición por peloteitor; 09/08/2004 a las 06:23
  #7 (permalink)  
Antiguo 09/08/2004, 13:16
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 20 años, 4 meses
Puntos: 0
No conozco muy bien MySql pero prueba con esto:

SELECT * FROM tabla WHERE tabla.cuerpo='%Palabra%' AND IdPadre=0
UNION
SELECT tabla.* FROM tabla INNER JOIN (SELECT IdPadre FROM tabla WHERE tabla.cuerpo='%Palabra%' GROUP BY IdPadre) cns ON tabla.Id=cns.IdPadre

Última edición por Atzeneta; 09/08/2004 a las 13:20
  #8 (permalink)  
Antiguo 09/08/2004, 13:30
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 6 meses
Puntos: 2
Es que la versión de mysql que tengo no permite subselects pero creo que la solución de vice me valdrá aunque no he podido probarla. Muchas gracias a todos por vuestras respuestas.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #9 (permalink)  
Antiguo 10/08/2004, 08:59
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 6 meses
Puntos: 2
Vice, aunque no lo hice exactamente igual que tú si que me ha servido de mucho lo de los alias, no sabía que se podía hacer. Muchas gracias de verdad

Muchas gracias también al resto por sus contestaciones.
__________________
¿Te apasiona el mundo del guión? El portal del guión
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.