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

<b>Please!!!!Condiciones en una query</b>

Estas en el tema de <b>Please!!!!Condiciones en una query</b> en el foro de Mysql en Foros del Web. Hola a todos/as Tengo un problema un poco espeso con un query ya que mi nivel de sql no es muy alto Intentare explicarme lo ...
  #1 (permalink)  
Antiguo 24/09/2009, 05:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
<b>Please!!!!Condiciones en una query</b>

Hola a todos/as

Tengo un problema un poco espeso con un query ya que mi nivel de sql no es muy alto
Intentare explicarme lo mejor posible,a ver si alguien entiende este cacao y puede exarme un cable
La web es tipo meetic,los usuarios se registran y rellenan un perfil.Tambien rellenan un perfil de que es lo que buscan en la otra persona.
Entonces tenemos dos registros,lo que soy y lo que busco,bien,la cuestion es hacer que cuantas mas compatibilidades haya entre lo que un usuario busca y lo que las otras usuarias han puesto que ellas son aparezcan mas arriba en la busqueda

Lo he intentado creando variables y sumandoles uno si cumplian la condicion,pero solo funciona en el primer if,despues,aunque la condicion sea cierta no me suma uno.
Pongo el codigo por si alguien sabria darme otra opcion o decirme que puede estar mal,tambien para el que le pueda interesar

a- = arroba,no me dejaba postear poniendo arrobas,para declarar variables ponia arroba


SELECT a-total1 := 0, a-total2 := 0, a-total7 := 0, a-total8 := 0, a-total9 := 0, a-total10 := 0, a-total11 := 0;

SELECT clients.idClient,
clients.anuncio,
clients.alta,
clients21.fecha_de_nacimiento,
clients21.busco_desde,
clients21.busco_hasta,
clients.onLine,
clients.navigationMode,
(SELECT archivo FROM photos WHERE tipo=1 AND idClient = clients.idClient) AS archivo,
clients.usuario,
clients21.poblacion,
clients21.provincia,
paisesISO.paisES AS pais,

IF(respuestas21.idFormPregunta ='1' AND valorClientRespuesta IN(2), a-total1 := 1, a-total1 :=0) AS total1,
IF(respuestas21.idFormPregunta ='2' AND valorClientRespuesta IN(2), a-total2 := 1, a-total2 :=0) AS total2,
IF(respuestas21.idFormPregunta ='7' AND valorClientRespuesta IN(2), a-total7 := 1, a-total7 :=0) AS total7,
IF(respuestas21.idFormPregunta ='8' AND valorClientRespuesta IN(2), a-total8 := 1, a-total8 :=0) AS total8,
IF(respuestas21.idFormPregunta ='9' AND valorClientRespuesta IN(1), a-total9 := 1, a-total9 :=0) AS total9,
IF(respuestas21.idFormPregunta ='10' AND valorClientRespuesta IN(1,2), a-total10 := 1, a-total10 :=0) AS total10,
IF(respuestas21.idFormPregunta ='11' AND valorClientRespuesta IN(1,2), a-total11 := 1, a-total11 :=0) AS total11,
a-total1+ a-total2+ a-total7+ a-total8+ a-total9+ a-total10+ a-total11 AS totalResultado

FROM clients
INNER JOIN clients21 ON clients.idClient = clients21.idClient
LEFT OUTER JOIN respuestas21 ON clients.idClient = respuestas21.idClient
INNER JOIN paisesISO ON clients21.pais = paisesISO.acro
AND clients.idClient NOT IN ('')
AND clients.idClient <>2621
GROUP BY clients.idClient ORDER BY totalResultado DESC

En el primer SELECT creo las variables
La primera parte del segundo SELECT es donde recojo campos normales,edad,poblacion etc....
Despues cuando empiezan los IF es donde pregunto si ha contestado a esa respuesta y si tiene un valor determinado,en caso de que sea correcto cojo la variable correspondiente a esa pregunta y le sumo uno
Despues de los IFS intento sumar todas las variables
Al final ordeno por estos valores.
El problema es que solo comprueba el primer IF,ahi si me dice si la ha contestado bien o no,pero en los siguientes no

Gracias de nuevo a todos/as

Última edición por Nexus333; 24/09/2009 a las 06:42
  #2 (permalink)  
Antiguo 25/09/2009, 00:19
 
Fecha de Ingreso: octubre-2008
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: <b>Please!!!!Condiciones en una query</b>

Nadie se arriesga???????
  #3 (permalink)  
Antiguo 25/09/2009, 06:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: <b>Please!!!!Condiciones en una query</b>

Como consejo... crea una función en mysql que te haga el trabajo.

separa el problema en partes y brindales el tratamiento requerido. Después de creada la función solo basta con hacer un llamado.

Saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 28/09/2009, 02:39
 
Fecha de Ingreso: octubre-2008
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: <b>Please!!!!Condiciones en una query</b>

Cita:
Iniciado por huesos52 Ver Mensaje
Como consejo... crea una función en mysql que te haga el trabajo.

separa el problema en partes y brindales el tratamiento requerido. Después de creada la función solo basta con hacer un llamado.

Saludo.
Hola huesos,gracias por contestar,te refieres a hacerlo con un procedimiento almacenado?????
  #5 (permalink)  
Antiguo 28/09/2009, 09:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: <b>Please!!!!Condiciones en una query</b>

Funciòn o procedimiento almacenado. Todo este proceso en una sola consulta queda muy engorrosa.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 28/09/2009, 09:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: <b>Please!!!!Condiciones en una query</b>

Mi propuesta tal vez requiera un poco de depurado o de ajuste de los INNER JOIN, pero... ¿has probado hacer algo así?:
Código sql:
Ver original
  1. SELECT
  2.     C.idClient,
  3.     C.anuncio,
  4.     C.alta,
  5.     CL.fecha_de_nacimiento,
  6.     CL.busco_desde,
  7.     CL.busco_hasta,
  8.     C.onLine,
  9.     C.navigationMode,
  10.     P.archivo,
  11.     C.usuario,
  12.     CL.poblacion,
  13.     CL.provincia,
  14.     P.paisES pais,
  15.     (IF(R.idFormPregunta ='1' AND valorClientRespuesta IN(2), 1, 0) +
  16.     IF(R.idFormPregunta ='2' AND valorClientRespuesta IN(2), 1, 0) +
  17.     IF(R.idFormPregunta ='7' AND valorClientRespuesta IN(2), 1, 0) +
  18.     IF(R.idFormPregunta ='8' AND valorClientRespuesta IN(2), 1, 0) +
  19.     IF(R.idFormPregunta ='9' AND valorClientRespuesta IN(1), 1, 0) +
  20.     IF(R.idFormPregunta ='10' AND valorClientRespuesta IN(1,2), 1, 0) +
  21.     IF(R.idFormPregunta ='11' AND valorClientRespuesta IN(1,2), 1, 0)) totalResultado
  22. FROM
  23.     clients C INNER JOIN photos P USING(idClient)
  24.     INNER JOIN clients21 CL USING(idClient)
  25.     LEFT OUTER JOIN respuestas21 R USING(idClient)
  26.     INNER JOIN paisesISO P ON CL.pais = P.acro
  27. WHERE
  28.     C.idClient NOT IN ('') AND
  29.     C.idClient <>2621 AND
  30.     P.tipo = 1
  31. GROUP BY clients.idClient
  32. ORDER BY totalResultado DESC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 30/09/2009, 10:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: <b>Please!!!!Condiciones en una query</b>

Perdona la tardanza pero he estado de viaje hasta hoy, no,no he probado,osea,es como darle una especie de alias a las tablas????No soy muy maquina en mysql,voy a coger tu codigo y mirar que es el "using" que usas,a ver si descifro bien que haces antes de usarlo.Mil gracias de nuevo por contestar,a ver si hay suerte,si no me da que voy a tener que hacer una macro query y despues cribar con php que lo manejo algo mas...........

Gracias a todos de nuevo
  #8 (permalink)  
Antiguo 30/09/2009, 16:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: <b>Please!!!!Condiciones en una query</b>

Es un poco de todo.
Los alias para reducir el nombre de las invocaciones. No llevan AS poque no es obligatorio desde hace años.
Suprimí las variables porque en el contexto e lo que se quiere hacer no se necesitan si se genera una forma de cálculo directo.
Las condiciones del WHERE me parecen inseguras y que les faltan condiciones y control de NULL, pero las dejé porque no conozco el contenido de las tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 23:40.