Problema con consula MySQL

suaveSHOW

Buenas, esto haciendo un buscador y tengo un problemilla.
La consulta que hago es esta:

SELECT 
       e.titulo, e.estado ,e.texto, e.autor, e.tags, u.user 
FROM 
       entradas as e, usuarios as u 
WHERE
       e.estado=1 $parametros
LIMIT 50

$parametros: (empieza por un AND) corresponde a una serie de LIKE, AGAINSTS, MATCH, blalba.

El problema esta en que me ignora el primer WHERE e.estado=1 (Cuando estado=0 son ocultas o en borrador)

tOWERR

Has probado a poner el AND y en la variable dejar el valor que te devuelva?

¿Podrias poner el valor que tiene esa variable?
Un saludo.

NeB1

#1 imprime la consulta entera, con la variable incluida. quizás te falta encerrar entre paréntesis todas las cláusulas de $parametros para que la consulta se quede

SELECT
       e.titulo, e.estado ,e.texto, e.autor, e.tags, u.user
FROM
       entradas as e, usuarios as u
WHERE
       e.estado=1 AND (e.titulo ='lol' OR e.texto = 'lel' OR MATCH....)
LIMIT 50

porque si por contra la consulta te queda así sin paréntesis:

SELECT
       e.titulo, e.estado ,e.texto, e.autor, e.tags, u.user
FROM
       entradas as e, usuarios as u
WHERE
       e.estado=1 AND e.titulo ='lol' OR e.texto = 'lel' OR MATCH....
LIMIT 50

pues ahí omitirá el AND primero si alguna de las comparaciones tras los 'ORS' devuelve true.

1 1 respuesta
eXtreM3

Y la respuesta correcta es.... ttttrrrrrrrrrrrrrrrttttttttrrrrrrr #3 !!

Aprovecho el hilo para poner otra consulta de mysql por si a alguien le interesa alguna vez.

Necesitamos sacar los valores repetidos de una tabla, sólo una vez. Ejemplo, tenemos la tabla personas: idPersona, nombre

1 Laura
2 Carlos
3 Juan
4 Laura
5 Carlos
6 Laura
7 Manolillo

y queremos sacar los nombres que estén repetidos más de una vez

SELECT nombre FROM personas GROUP BY nombre HAVING COUNT(*) > 1

Cuando hice el módulo de DAI y me enseñaron a hacer esta consulta, en clase lo hacíamos como "método más eficiente" según el profesor, con producto cartesiano (ya de hecho ni me acuerdo), era algo de hacer un FROM personas AS p1 , personas AS p2 y despues un where chungo.

MUCHO más eficiente con el método del group by ;) , tiene muchas utilidades esta consulta :P espero que alguna vez a alguien le haga falta ^^

EDITO: mi consulta en el ejemplo devolverá:

nombre
Laura
Carlos

Y si además hacemos un

SELECT COUNT(idPersona), nombre FROM personas GROUP BY nombre HAVING COUNT(*) > 1

devolverá

COUNT nombre
3 Laura
2 Carlos

con esto y un bizcocho, buenas noches xD

suaveSHOW

He hecho un print de la consulta y me da esto:

SELECT 
     e.titulo, e.estado, e.id ,e.texto, e.autor, e.tags, u.user 
FROM
     entradas as e, usuarios as u 
WHERE e.estado='1' AND 
     (e.titulo LIKE '%juan%' OR e.texto LIKE '%juan%' OR e.tags LIKE '%juan%' OR e.titulo LIKE '%ignorancia%' OR e.texto LIKE '%ignorancia%' OR e.tags LIKE '%ignorancia%') LIMIT 50

Siguen apareciendome las que tienen estado=0

EDIT: SOLUCIONADO, me faltaba añadir AND u.id=e.autor, me repetia las de estado 0 pero 1 por cada autor jeje.

Usuarios habituales

  • suaveSHOW
  • eXtreM3
  • NeB1
  • tOWERR