Consulta en PHP - urgente

Hola que tal. Mi pregunta es de suma urgencia y espero me puedas ayudar por favor... Tengo un sistema donde el cliente realiza la consulta y el asesor responde a dicha consulta, trabaja idénticamente que un foro, o que esta página (www.todoexpertos.com)
Tengo 2 tablas:
1.- Consultas: en esta table se guarda la persona que realizo la consulta(id_cliente), luego a quien va dirigido la consulta(id_asesor), ademas, la fecha, hora, puntaje, etc..
2.- Respuestas: en esta tabla se guarda las consultas, respuestas, aclaraciones, etc.(id_respuesta, id_consulta, tit_respuesta, respuesta, fecha, hora, adjuntos)
---Acá el problema---
Estoy realizando un modulo de búsqueda, por ejemplo cuando dígito igv, me tendrá que aparecer todas las consultas que tengan dicha palabra, sin embargo cuando realizo la consulta SQL, me va aparecer datos repeditos, porque puede que en una sola consulta haya varias consultas o respuestas con esa palabra, y lo que deseo es agruparlos, de tal manera que no haya datos repetitivos.
Lo que ya hago es lo siguiente:
select * from respuestas where respuesta like '%$palabra%'
Y supongamos que en una sola consulta (que tiene 2 preguntas y 2 respuestas) existan la palabra "IGV" entonces me aparecerá así:
- Titulo pregunta 1: (enlace con id_consulta 1234)
- Titulo respuesta 1: (enlace con el mismo id_consulta anterior (1234))
- Titulo pregunta 2: (enlace con el mismo id_consulta anterior (1234))
- Titulo respuesta 2: (enlace con el mismo id_consulta anterior (1234))
- Titulo pregunta 5: (enlace con id_consulta 5267)
- Titulo pregunta 6: (enlace con id_consulta 5563)
...
...
...
Y así sucesivamente..
Espero tu respuesta por favor..
es de suma urgencia.. ç
Gracias..

1 respuesta

Respuesta
1
Si tienes por ejemplo dos preguntas y dos respuestas pertenecientes a la misma consulta, ¿cómo sabes que están relacionadas? En tu ejemplo anterior ¿cómo sabes que la respuesta 2 con id_consulta=1234 pertenece a la pregunta 2 y no a la pregunta 1? Porque supongo que pregunta 1 y pregunta 2 están en la tabla de consultas y no en la de respuestas.
Cuando realizar la búsqueda de tu ejemplo, si no me equivoco, solo tendría que salir el titulo de la pregunta 1, el titulo de la pregunta 5, y el titulo de la pregunta 6. Pero si la palabra IGV aparece en la respuesta 9, por ejemplo, tendría que aparecer la pregunta 9.
Pero por lo que veo tu solo buscas en respuestas. Tienes que aclararme mejor cuales son los campos de cada tabla y como distingues las diferentes preguntas y respuestas de una misma consulta, porque tendrás que mostrarlas en el mismo orden en el que se han ido produciendo. ¿Quizá usas los campo fecha y hora?
Entonces, siguiendo tu ejemplo, podrías probar la siguiente consulta:
SELECT * FROM respuestas R1, respuestas R2 WHERE R1.respuesta LIKE '%$palabra%' AND R1.id_consulta <> R2.id_consulta ORDER BY fecha,hora
No he probado esta consulta pero creo que funcionará, aunque sigue teniendo el problema que solo busca en respuestas y no en preguntas.
Obviamente existe 2 campos adicionales llamados fecha y hora...
Te explico mejor:
La tabla consultas es la cabecera y la tabla respuestas es el detalle...
Para diferenciar si es una pregunta o es una respuesta pues le adiciono un campo llamado isquestion, que almacena el valor char(1), "S" es cliente y "N" es suscriptor..., es así como también diferencio los colores y el icono, tal como lo hace en todoexpertos.com.
Espero me hayas entendido..
Y por favor preciso la respuesta lo más pronto, gracias anticipadamente..
Las preguntas y respuestas se almacenan en la tabla respuestas y se relaciona con el id_consulta que existe en ambas tablas..
Entiendo, tienes tanto las respuestas como las preguntas en la tabla respuestas y por eso solo tienes que realizar la búsqueda en esa tabla.
Entonces la consulta de mi espuesta anterior podría funcionar, ya que solo busca en la tabla respuestas. Selecciona todos los registros que contengan la palabra buscada, los ordena por fecha y hora, y luego si hay dos o más registros con el mismo id_consulta, se queda sólo con el primero, que corresponderá a la primera pregunta de esa consulta.
Ahora no puedo hacer pruebas porque no tengo mysql instalado, mañana lo podré probar. Pruébalo tu mientras y si no te funciona me lo dices.
Me envía este error:
Column: 'fecha' in order clause is ambiguous
Tenia una consulta anterior, y si me funcionaba ok, pero como repito, dicha consulta me envía datos repetidos.
Por favor si me puede ayudar..
La consulta:
$db = "SELECT * FROM respuestas R1, respuestas R2 WHERE R1.respuesta LIKE '%$palabra%' AND R1.id_consulta <> R2.id_consulta order by fecha";
Sin embargo no me sale, me aparece el error indicado anteriormente..
Espero su respuesta alo más pronto.. gracias
Es cierto, el campo fecha no tiene referencia ni a R1 ni a R2. La correcta sería:
$db = "SELECT * FROM respuestas R1, respuestas R2 WHERE R1.respuesta LIKE '%$palabra%' AND R1.id_consulta <> R2.id_consulta order by R1.fecha";
Esta consulta supongo que estará bien, no te tiene que mostrar datos repetidos y los que obtenga te los muestra por orden ascendente de fecha.
Esta es mi consulta:
$db = "SELECT * FROM respuestas R1, respuestas R2 WHERE R1.respuesta like '%$texto%' and R1.id_consulta <> R2.id_consulta limit 0,10";
Ya no lo ordene por fecha para no hacerme mucho problema... sin embargo me imprime 10 registros pero todos son repetidos..
Ya probé ordenándolos por fecha pero sigue igual...
Espero tu respuesta lo más pronto..
Y mucha gracias por las atenciones prestadas..
Excelente maestro... muchísimas gracias, por tenerme paciencia...
He creado una base de datos de prueba y he realizado la siguiente consulta que me elimina todos excepto un registro que peretenecen a la misma consulta. Pruébalo con tu base de datos:
SELECT * FROM respuestas where respuesta like '%php%' group by id_consulta order by fecha desc limit 0,10

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas