Foros del Web » Programando para Internet » PHP »

Problema con una consulta

Estas en el tema de Problema con una consulta en el foro de PHP en Foros del Web. Hola, Ago esta consulta: "SELECT * FROM objetos WHERE id IN(".$data['vaul'].")" Para sacar los datos de la tabla objetos. $data['vaul'] tiene los ides separados con ...
  #1 (permalink)  
Antiguo 05/01/2009, 13:19
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Problema con una consulta

Hola,
Ago esta consulta:
"SELECT * FROM objetos WHERE id IN(".$data['vaul'].")"
Para sacar los datos de la tabla objetos. $data['vaul'] tiene los ides separados con comas(,).
El problema es que si $data['vaul'] tiene 1,1,1,2,2,3,3 solo me muestra uno de cada uno es decir 1,2,3 y nesesito que me muestre todos.
Gracias
Salu2
__________________
Half Music - www.halfmusic.com

Última edición por pato12; 05/01/2009 a las 13:43
  #2 (permalink)  
Antiguo 05/01/2009, 13:27
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Problema con una consulta

Saludos..

Podrías mostrar la estructura de esa tabla y los datos que tiene para esos ids que manejas en el ejemplo..
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 05/01/2009, 13:33
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Problema con una consulta

... ¿tendrás algún error de concepto?
Código sql:
Ver original
  1. SELECT * FROM objetos WHERE id IN(1, 1, 1, 1);
  2. -- Es igual a:
  3. SELECT * FROM objetos WHERE id = 1;
  4. -- y deberá traer TODOS aquellos donde id = 1
  5.  
  6. -- Entonces:
  7. SELECT * FROM objetos WHERE id IN(1, 1, 2, 3);
  8. -- es igual a:
  9. SELECT * FROM objetos WHERE id = 1 OR id=2 OR id=3;

... hace mucho no manejo SQL , pero por ahí debe ser. Espero explicarme.

¿Entonces, qué pasa si haces su consulta con OR's?, deberías tener los mismos resultados, ¡porque esos son los resultados!. No tiene ni sentido pasar parámetros repetidos para IN (1, 1, 2, 2).

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 05/01/2009, 13:36
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con una consulta

Hola,
La estructura es haci:

id | id_city | name | imagen | defensa | ataque | vida | costo
------------------------------------------------------------------------------
1 | 1 | daga | daga.jpg | 1 | 2 | 0 | 75
------------------------------------------------------------------------------
2 | 1 | escudo |ecudo.gif | 3 | 0 | 0 | 125
------------------------------------------------------------------------------
3 | 1 |psion |posion.gif| 0 | 0 | 3 | 25
------------------------------------------------------------------------------

jam1138:
Es que el usuario va comprando cosas y se va guardande en una fila llamada vaul separado por comas (,).
No se si es la consulta o el paginador (uso el PHPPaging).

Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #5 (permalink)  
Antiguo 05/01/2009, 13:44
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Problema con una consulta

No voy a enterder la funcionalidad de tu aplicación solo con esas palabras. Sin embargo, según lo que muestras que es tu tabla, la columna (no fila) id solo tiene valores únicos (1, 2, 3), ¿por qué habría de mostrarte más de uno según mencionas en tu mensaje inicial?. Será que querías referirte a la columna id_city?

Repito: tener más de un valor para la función IN() no tiene sentido. Por la propia naturaleza, y con toda lógica, los "ignora" los duplicados. Solo la nota, que tampoco es que sea un error o problema --para nada--.

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 05/01/2009, 13:49
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con una consulta

Hola,
No me refiero al id_city.
Yo no elijo que va en la variable $data['vaul'], el usuario (con su cuenta) va comprando y se agrega automaticamente los ids.
¿Como puedo hacer para que me muestren todos, si con IN no se puede?
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #7 (permalink)  
Antiguo 05/01/2009, 14:03
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Problema con una consulta

... ... no nos estamos entendiendo

Es que con "IN" sí se puede, y ¡es lo que estás haciendo!. En tu BD que dejas, tienes "un 1, un 2 y un 3" (1, 2, 3) cuando haces IN (1, 2, 1, 3, 1, 2, 3, 1, 1, 2, 3), va a traer TODOS los "1, 2 y 3", que en tu base de datos son "un 1, un 2, y un 3" .

No me gusta "hablar así", pero pareciera hay veces se entiende mejor. Como dije, creo tienes un error de concepto ... o no estoy entendiendo cuál es tu problema :-/
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 05/01/2009, 14:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con una consulta

Lo que puedes es hacer un conteo de lo que tienes que tu variable $data['vaul'] y asi ir viendo cuantas veces vas a imprimir ya que la consulta SQL te va a regresar solo una vez el ID.

Ahora si es como un carrito de compras, por eso manejas cantidades, ya que con esas puedes saber del id 1, voy a comprar 20 items.

Saludos.
  #9 (permalink)  
Antiguo 05/01/2009, 14:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Problema con una consulta

Cita:
Iniciado por GatorV Ver Mensaje
Ahora si es como un carrito de compras, por eso manejas cantidades, ya que con esas puedes saber del id 1, voy a comprar 20 items.
¡Claro! :foco: (¿no hay ícono de un foquillo por aquí? )

Pato, esa ya es funcionalidad de tu aplicación, no debes majarlo con la Base de Datos, es tema aparte, es qué harás tu con esa información.

Como sea, podrían servirte las funciones substr_count() o un explode() y un array_count_values().
www.php.net/substr_count
www.php.net/array_count_values

Con esto, después de recuperar tu información de la base de datos, comparas el identificador y lo muestras tantas veces sea necesario ... a mi parecer, es así la mejor manera de hacerlo, es un error pensar en querys.

Suerte
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 05/01/2009, 14:14
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con una consulta

Hola,
Creo que no me estas entendiendo
Si me trae todos los ids, pero quiero que me muestren los resultados repetidos.
Es decir que si ago:
Código PHP:
<?php
$sql
=mysql_query("SELECT * FROM objetos WHERE id IN(1,1,2,2,3,3)");
while(
$datmysql_fetch_array($sql)){
echo 
$dat['name']."<br />";
}
?>
Me muestra:
Daga
Escudo
Posion

Y quiero que me muestre aun que esten repetidos:
Daga
Daga
Escudo
Escudo
Posion
Posion

Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #11 (permalink)  
Antiguo 05/01/2009, 14:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con una consulta

Lee y estudia lo que te pusimos Jam y yo en el post anterior, con la BDD no puedes hacerlo, esa es logica de la aplicación.

De hecho la BDD le estas dando un trabajo extra al analizar y parsear la query con esos datos repetidos, por lo que tu aplicación se hace más lenta.

Saludos
  #12 (permalink)  
Antiguo 05/01/2009, 14:26
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con una consulta

Hola,
Gracias GatorV y jam1138.
Ya me arme el sistema y anda de 10.

Salu2
__________________
Half Music - www.halfmusic.com
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 06:16.