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+--------+--------+
| campo1 | campo2 |
+--------+--------+
| 1 | uno |
| 1 | uno |
| 2 | uno |
+--------+--------+
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+--------+
| campo2 |
+--------+
| uno |
+--------+
es decir, un solo registro. Sin embargo, cuando consideras también el campo1 observa qué pasa:
Código MySQL:
Ver original+--------+--------+
| campo1 | campo2 |
+--------+--------+
| 1 | uno |
| 2 | uno |
+--------+--------+
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.