Foros del Web » Programando para Internet » PHP »

Comparación idéntica en sentencia SQL

Estas en el tema de Comparación idéntica en sentencia SQL en el foro de PHP en Foros del Web. Hola, Tengo este query: Código PHP:  $sql  =  "UPDATE equipos SET puntos = '$puntos' WHERE torneo = '$torneo' && jugador1 = '$jugador' || jugador2 = '$jugador' || jugador3 = '$jugador'" ;  La variable $torneo es Fall Cup o Spring Cup (por ejemplo) y mi problema viene ...
  #1 (permalink)  
Antiguo 30/03/2012, 19:15
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Comparación idéntica en sentencia SQL

Hola,

Tengo este query:

Código PHP:

 $sql 
"UPDATE equipos SET puntos = '$puntos' WHERE torneo = '$torneo' && jugador1 = '$jugador' || jugador2 = '$jugador' || jugador3 = '$jugador'"
La variable $torneo es Fall Cup o Spring Cup (por ejemplo) y mi problema viene es que, según parece, torneo = '$torneo' no es una comparación idéntica sino parcial. El resultado de este query me devuelve todas las filas que tienen *Cup y no sólo Fall Cup o Spring Cup (según sea el caso).

¿Cómo hago para que me devuelva la cadena idéntica de la variable?

Gracias!
__________________
Equívocos sin importancia
  #2 (permalink)  
Antiguo 30/03/2012, 19:44
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Exclamación Respuesta: Comparación idéntica en sentencia SQL

Primero que todo si vas a trabajar comparaciones entre cadenas... lo siempre recomendable es trabajar con el patrón LIKE:

Código:
UPDATE equipos SET puntos = '$puntos' WHERE torneo LIKE '$torneo' AND jugador1 LIKE '$jugador' OR jugador2 LIKE '$jugador' OR jugador3 LIKE '$jugador'
Y la comparación es por patrones idénticos (exceptuando mayúsculas) y no parcial.

Me gustaría que revisaras primero el estado de la variable torneo:

Código:
var_dump($torneo);
Documentación: http://dev.mysql.com/doc/refman/5.0/...functions.html

Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.
  #3 (permalink)  
Antiguo 30/03/2012, 20:04
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Respuesta: Comparación idéntica en sentencia SQL

Hola, Jair!

Gracias por tu respuesta, creo que nos vamos acercando al error. Ojalá me pueda explicar bien:

Mi tabla "puntos" tiene ahora 3 filas. En dos de ellas el campo Torneo es Fall Cup y en la tercera Spring Cup. En las tres está el jugador Fulano de Tal.

Si yo hago así:

Código PHP:
$sql "UPDATE equipos SET puntos = '$puntos' WHERE torneo LIKE '$torneo'" 
El resultado es correcto:

Se han modificado 2 filas
string(8) "Fall Cup"

Sin embargo, al momento de agregar:

Código PHP:
 $sql "UPDATE equipos SET puntos = '$puntos' WHERE torneo LIKE '$torneo' AND jugador1 LIKE '$jugador' OR jugador2 LIKE '$jugador' OR jugador3 LIKE '$jugador'"
El resultado es:

Se han modificado 3 filas
string(8) "Fall Cup"
string(15) "Fulano de Tal"

Cuando tendría que ser el mismo porque sólo quiero modificar las filas Fall Cup con Fulano de Tal y en esta ultima orden modifica todas las filas con "Fulano de Tal" sin importar el campo "torneo".

¿Cuál puede ser el problema?

Gracias!
__________________
Equívocos sin importancia
  #4 (permalink)  
Antiguo 30/03/2012, 20:55
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Exclamación Respuesta: Comparación idéntica en sentencia SQL

Regálame el result de esta consulta:

Código PHP:
UPDATE equipos SET puntos '$puntos' WHERE (jugador1 LIKE '$jugador' OR jugador2 LIKE '$jugador' OR jugador3 LIKE '$jugador') AND torneo LIKE '$torneo' 
Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.
  #5 (permalink)  
Antiguo 30/03/2012, 21:08
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Respuesta: Comparación idéntica en sentencia SQL

Jair,

Esa sentencia parece que funciona perfecto.


Ahora bien, me parece curioso porque antes de tu respuesta había probado esto:

Código PHP:
$sql "UPDATE equipos SET puntos = '$puntos' WHERE (jugador1 LIKE '$jugador') OR (jugador2 LIKE '$jugador') OR (jugador3 LIKE '$jugador') AND torneo LIKE '$torneo'"
Y esta consulta funcionaba a veces y a veces no, es decir, tenía el problema del código en el primer mensaje. ¿Por qué podría ser?

De todas maneras, probé varias veces y con diferentes combinaciones tu consulta y no falló ninguna vez así que supongo que esa es la buena.

Muchas gracias!
__________________
Equívocos sin importancia
  #6 (permalink)  
Antiguo 30/03/2012, 21:14
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Respuesta: Comparación idéntica en sentencia SQL

Porque realmente en esa no estabas agrupando condiciones... sinceramente ahí no estaban haciendo nada tus paréntesis.

El comportamiento independiente lo indicaba el torneo, pero el de los jugadores podía variar dependiendo de la variable jugador, por ello mi orden. Para que no te compliques en estos casos agrupa las condiciones por estado de variable (que para tu caso era jugador como variable).

Sobra destacar la importancia del orden de acondicionamiento en SQL.

Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.

Etiquetas: sentencia, sql, variables
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 05:03.