Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con consulta en MYSQL

Estas en el tema de Problema con consulta en MYSQL en el foro de PHP en Foros del Web. Hola que tal buena tarde Tengo un problema con una consulta en Mysql usando PHP Tengo 3 campos en una tabla llamada solicitudes que es ...
  #1 (permalink)  
Antiguo 22/03/2016, 12:53
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Mensaje Problema con consulta en MYSQL

Hola que tal buena tarde

Tengo un problema con una consulta en Mysql usando PHP

Tengo 3 campos en una tabla llamada solicitudes que es Puesto, Puesto2, Puesto3 lo que quiero es hacer un select con estos tres campos usando el distinct pero no me lo respeta, mi codigo es asi

Código PHP:
Ver original
  1. $sql_consulta="SELECT DISTINCT Puesto, Puesto2, Puesto3  FROM solicitudes";
  2. echo "<select name=Puesto_Consulta disabled=disabled>";
  3. $res_consulta=mysql_query($sql_consulta) or die ("Hay un error de ".mysql_error());;
  4.  
  5.     while($row = mysql_fetch_row($res_consulta)){
  6.  
  7. echo "<option>".$row[0]."</option>";
  8. echo "<option>".$row[1]."</option>";
  9. echo "<option>".$row[2]."</option>";
  10.  
  11.  
  12. }
  13.  
  14. echo "</select>";


Como mencione no respeta el distinct

Help!!
  #2 (permalink)  
Antiguo 22/03/2016, 13:01
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 6 meses
Puntos: 39
Respuesta: Problema con consulta en MYSQL

Pues entonces no es problema de PHP

Además, no sabemos qué datos tiene tu tabla (ejemplos), ni cómo está estructurada.
  #3 (permalink)  
Antiguo 22/03/2016, 13:10
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

Ok tienes razón.. Mm pues como dije tengo 3 campos es Puesto, Puesto2, Puesto3.. Digamos que el usuario puede elegir máximo 3 perfiles para ser contratado en una empresa... A la hora de guardar los datos le digo que si es mas de un perfil que lo separe por comas, despues uso la funcion explode para separalo y meter las porciones en cada campo... es decir en Puesto, Puesto2, Puesto3

uso el distinct porque pudiera suceder que otra persona quiera algun puesto ya registrado, pero no lo respeta... ¿como le hago?
  #4 (permalink)  
Antiguo 22/03/2016, 13:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 7 meses
Puntos: 2656
Respuesta: Problema con consulta en MYSQL

Cita:
Como mencione no respeta el distinct
Vamos a hacer una aclaración, por las dudas...

En lo que a la Base de Datos se refiere, dos o más registros se consideran IGUALES sí y sólo si todos y cada uno de los campos entre ambos registros tienen exactamente el mismo valor entre dos registros cualesquiera.

¿Se entiende?

Si entre dos registros cualesquiera, de cualqueir cantidad de campos, hay al menos UN valor que no es igual al otro registro, eso para la base son registros DIFERENTES.

Ahora bien, ¿se cumple que hay al menos un valor que sea diferente, o son completamente iguales entre dos registros todos los campos?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 22/03/2016, 13:37
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

Puede ser que un valor de campo pueda ser diferente a los demas y pueda ser que algun valor de un campo sea igual al de otro campo
  #6 (permalink)  
Antiguo 22/03/2016, 15:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 7 meses
Puntos: 2656
Respuesta: Problema con consulta en MYSQL

Cita:
Iniciado por hector_hinge_18 Ver Mensaje
Puede ser que un valor de campo pueda ser diferente a los demas y pueda ser que algun valor de un campo sea igual al de otro campo
Las tablas devueltas en una consulta son bascias: Tienen N columnas, una por cada columna (campo) invocada en la consulta, y tantos registros como devuelva la consulta.
Cad registro se interpreta como unidad, donde los valores se emparejan por columna, por lo que si la columna 2 del registro 356 tiene el mismo valor que la columna 17 de registro 4890, es irrelevante porque cada columna pertenece a un dominio diferente del universo representado en la tabla.
¿Se enteniende?
Solo se pueden comparar igualdades entre columnas del mismo orden en los diferentes registros, y la igualdad en BBDD es cuando todas las columnas repiten todos los datos, y en el mismo orden, entre dos o más registros.
Si al menos UNA en UN registro tiene datos diferentes a otro registro, esos son registros DIFERENTES.
Pero si NO se cumple eso, no lo son.

La idea es que este conjunto:

{12, 5, 98, 35, 785, 659, 1, 5, 69, 88, 5972}

y este:

{12, 5, 98, 35, 785, 659, 1, 5, 69, 86, 5972}

Son diferentes para la base de datos.

Muestranos un ejemplo de lo que tu consideras que no cumple la premisa, yotro ejemplo de cómo quisieras que devuelva los datos.
Es altament eprobable que la cosa no se resuelva solamente con SQL...
__________________
¿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 22/03/2016, 18:47
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

ok gnzsoloyo gracias por contestar y tomarte tiempo para explicar.. Mira tengo estos 3 campos
Puesto, Puesto2, Puesto3.. Digamos que el usuario puede escribir en un formulario máximo 3 perfiles para ser contratado en una empresa... A la hora de guardar los datos le digo que si es mas de un perfil que lo separe por comas, después uso la función explode para separarlo y meter las porciones en cada campo de mi tabla solicitudes... es decir en Puesto, Puesto2, Puesto3...

Hago la sig consulta
Código PHP:
Ver original
  1. $sql_consulta="SELECT DISTINCT Puesto, Puesto2, Puesto3  FROM solicitudes";
  2. echo "<select name=Puesto_Consulta disabled=disabled>";
  3. $res_consulta=mysql_query($sql_consulta) or die ("Hay un error de ".mysql_error());;
  4.  
  5.     while($row = mysql_fetch_row($res_consulta)){
  6.  
  7. echo "<option>".$row[0]."</option>";
  8. echo "<option>".$row[1]."</option>";
  9. echo "<option>".$row[2]."</option>";
  10.  
  11.  
  12. }
  13.  
  14. echo "</select>";
esta consulta es para el modulo de consultas donde se mostraran todos los Puesto solicitados y apartir de ahi buscar todas las personas que busquen ese puesto, pero para ello uso el distinct porque puede haber mas de un persona que escriban por ejemplo AUXILIAR CONTABLE y solo quiero que se muestre una vez, pero para ello debo de evaluar los 3 campos... ¿Es posible?... Espero que me haya explicado
  #8 (permalink)  
Antiguo 23/03/2016, 12:37
 
Fecha de Ingreso: noviembre-2014
Ubicación: guadalajara
Mensajes: 18
Antigüedad: 5 años, 8 meses
Puntos: 0
Respuesta: Problema con consulta en MYSQL

segun yo estas mal en la consulta seria asi
$sql_consulta="SELECT tabla.campo, tabla.campo, tabla.campo DISTINCT FROM solicitudes";
  #9 (permalink)  
Antiguo 23/03/2016, 12:42
 
Fecha de Ingreso: noviembre-2014
Ubicación: guadalajara
Mensajes: 18
Antigüedad: 5 años, 8 meses
Puntos: 0
Respuesta: Problema con consulta en MYSQL

perdon me equivoque es asi de hecho te falto el mysql_query antes del select porque ahi no estas haciendo consulta y para que funcione el distinct tienes que poner antes del campo la tabla punto aunque sea la misma latabla ponlo en cada campo que necesites

$sql_consulta=mysql_query("SELECT DISTINCT solicitudes.Puesto, solicitudes.Puesto2, solicitudes.Puesto3 FROM solicitudes");
  #10 (permalink)  
Antiguo 23/03/2016, 22:47
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

Hola mira sigo teniendo el mismo problema, ya hice lo que me dijiste mira.
Código PHP:
Ver original
  1. <?php
  2.  
  3. $res_consulta=mysql_query("SELECT DISTINCT solicitudes.Puesto, solicitudes.Puesto2, solicitudes.Puesto3 FROM solicitudes") or die ("Hay un error de ".mysql_error());;
  4. //$res_consulta=mysql_query($sql_consulta);
  5. echo "<select name=Puesto_Consulta disabled=disabled>";
  6.  
  7. if ($res_consulta)
  8. {
  9.     while ($row = mysql_fetch_row($res_consulta))
  10.     {      
  11.         echo "<option>". $row[0]."</option>";
  12.             }  
  13. } //Fin del if
  14.     echo "</select>";
  15.      ?>

Y me sigue saliendo duplicados, por ejemplo existe un puesto que es panadero en el puesto1 y hay otro registro de otra personas con tambien panadero, me salen juntos en el combobox, no respeta el ditinct... O alguna otra manera de resolverlo??? Gracias
  #11 (permalink)  
Antiguo 23/03/2016, 23:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 7 meses
Puntos: 2656
Respuesta: Problema con consulta en MYSQL

El DISTINCT es sobre registros, No sobre columnas de un mismo registro.
¿Eso lo tienes claro, No?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 23/03/2016, 23:15
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 6 meses
Puntos: 39
Respuesta: Problema con consulta en MYSQL

Creo que no haz comprendido del todo lo que @gnzsoloyo trata de decirte.

Si tú ejecutas
Código SQL:
Ver original
  1. SELECT DISTINCT Puesto FROM solicitudes;

Te traerá lo que necesitas, unicamente de la columna "Puesto".
Pero, si tú ejecutas
Código SQL:
Ver original
  1. SELECT DISTINCT Puesto, Puesto2 FROM solicitudes;

Empieza lo que no necesitas. Por qué? Porque el que puso "panadero" en el puesto1, pudo haber puesto "mecánico" en el 2. Y otro registro tiene "panadero" en el puesto 1, pero tiene "chofer" en el 2, por lo que son diferentes. A ver si me explique

No tengo una solución pensada, pero al menos te quería explicar eso
  #13 (permalink)  
Antiguo 23/03/2016, 23:17
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

Mmm yaa entonces no se puede hacer lo que intento hacer?
  #14 (permalink)  
Antiguo 23/03/2016, 23:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 7 meses
Puntos: 2656
Respuesta: Problema con consulta en MYSQL

No de la forma que lo intentas, porque tu esquema de datos esta mal diseñado para este objetivo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 23/03/2016, 23:28
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

Ok si entiendo, he analizado varias opciones una de ellas era guardar los tres puestos posibles en un solo campo, y evitar Puesto, Puesto2 y Puesto3... Es decir que por ejemplo yo elijo Panadero, Mecanico, Auxiliar de contador guardarlo en un solo campo... Y después hacer la consulta mediante implode osea hacer un array y que cada posición del arreglo sea un perfil claro separado por la coma... ¿Es posible?
  #16 (permalink)  
Antiguo 23/03/2016, 23:32
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 4 años, 6 meses
Puntos: 39
Respuesta: Problema con consulta en MYSQL

Por qué no creas una tabla : ID | Idusuario | Puesto |.

Por cada puesto, creas un registro, donde le almacenas su fk (idusuario) por si necesitas tratar dicha info después, ejecutas la primer sql que te di en mi explicación y listo.
  #17 (permalink)  
Antiguo 24/03/2016, 12:21
 
Fecha de Ingreso: julio-2015
Mensajes: 26
Antigüedad: 5 años
Puntos: 0
Respuesta: Problema con consulta en MYSQL

Tendría que modificar toda la codificación que llevo... :/ De todas maneras lo intentare muchas gracias por sus comentarios!!

Etiquetas: mysql+consulta
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 11:39.