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

MySQL: SELECT DISTINCT + MATCH-AGAINST

Estas en el tema de MySQL: SELECT DISTINCT + MATCH-AGAINST en el foro de Mysql en Foros del Web. Hola, estoy intentando hacer un sistema de búsqueda que me devuelva sólo los resultados no repetidos: la búsqueda funciona perfectamente, y el SELECT DISTINCT también, ...
  #1 (permalink)  
Antiguo 29/07/2013, 11:06
 
Fecha de Ingreso: octubre-2006
Ubicación: The Far West, Buenos Aires
Mensajes: 262
Antigüedad: 18 años, 1 mes
Puntos: 28
MySQL: SELECT DISTINCT + MATCH-AGAINST

Hola, estoy intentando hacer un sistema de búsqueda que me devuelva sólo los resultados
no repetidos: la búsqueda funciona perfectamente, y el SELECT DISTINCT también, pero no
los dos juntos:

Código MySQL:
Ver original
  1. SELECT DISTINCT id, title, introtext, state, alias,
  2. MATCH ( title, introtext, alias)
  3. AGAINST ('$q' IN BOOLEAN MODE ) AS Score
  4. FROM jos_content
  5. WHERE MATCH ( title, introtext, alias )
  6. AGAINST ('$q' IN BOOLEAN MODE )
  7. ORDER BY Score DESC
  8. LIMIT 0 , 30;

Con este código, no recibo ningún error, pero no distingue los repetidos: todo lo repetido
me lo devuelve igual, como si el DISTINCT no funcionara

Luego, me gustaría saber cómo podría agregar una condición WHERE en este código.
Me marca un error donde sea que lo ponga
En algún lado tengo que poder agregar WHERE state=1
O bien agregarlo a la línea:
Código MySQL:
Ver original
  1. WHERE MATCH ( title, introtext, alias ) AND state=1

Pero no funciona, sí me marca error

Última edición por gnzsoloyo; 29/07/2013 a las 11:43 Razón: Codigo de programacion no permitido en foros de BBDD.
  #2 (permalink)  
Antiguo 29/07/2013, 11:37
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: MySQL: SELECT DISTINCT + MATCH-AGAINST

Hola diego quinteros:

Vayamos por partes... la Cláusula DISTINCT elimina Registros duplicados, pero cuidado... un registro está duplicado cuando TODOS LOS CAMPOS QUE REGRESAS SON IGUALES, es decir, con uno solo que tenga un valor distinto entonces ya no se considera un registro duplicado... Me gustaría que nos mostraras el resultado de la ejecución de la primer consulta, para saber a qué te refieres cuando dices que el DISTINCT no funciona... Creo que más que no funcionar tienes una idea errónea de qué es lo que hace esta función. Observa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+--------+
  3. | campo1 | campo2 |
  4. +--------+--------+
  5. |      1 | uno    |
  6. |      1 | uno    |
  7. |      2 | uno    |
  8. +--------+--------+
  9. 3 rows in set (0.00 sec)

Observa que todos los campos tienen la misma descripción en el campo2, pero tienen distintos números en el campo1... Si haces un DISTINCT seleccionando sólo el campo2 obtienes lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT DISTINCT campo2 FROM tabla;
  2. +--------+
  3. | campo2 |
  4. +--------+
  5. | uno    |
  6. +--------+
  7. 1 row in set (0.00 sec)

es decir, un solo registro. Sin embargo, cuando consideras también el campo1 observa qué pasa:

Código MySQL:
Ver original
  1. mysql> SELECT DISTINCT campo1, campo2 FROM tabla;
  2. +--------+--------+
  3. | campo1 | campo2 |
  4. +--------+--------+
  5. |      1 | uno    |
  6. |      2 | uno    |
  7. +--------+--------+
  8. 2 rows in set (0.00 sec)

es decir, aunque tienen la misma descripción en el campo2, tienen distintos números en el campo1, por lo tanto sólo elimina aquel registro donde la totalidad de los campos son iguales.

Ahora bien, con respecto a la segunda parte de la pregunta, dices que la consulta te marca error, pero no nos dices qué error es el que te está marcando... sin esta información resulta algo complicado decir qué está mal, sin embargo te comento que en tu código olvidaste colocar la parte del AGAINST, sólo pusiste el MATCH. El WHERE debería quedar así:

Código:
...
WHERE 
   MATCH ( title, introtext, alias )  AGAINST ('$q' IN BOOLEAN MODE )
   AND state=1
haz la prueba y nos comentas. Fialmente, NO COLOQUES CÓDIGO PHP O DE NINGÚN OTRO LENGUAJE DE PROGRAMACIÓN... está prohibido en este foro... enfócate sólo en código SQL...

Saludos
Leo.

Etiquetas: distinct, match, select
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 12:06.