Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/07/2013, 11:37
leonardo_josue
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.