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

Problemas con una sentencia MySQL

Estas en el tema de Problemas con una sentencia MySQL en el foro de Bases de Datos General en Foros del Web. Hola, tengo un problema que no logro solucionar, paso a explicarlo: Tengo una tabla donde se almacenan los artículos, otra donde se almacenan los pedidos ...
  #1 (permalink)  
Antiguo 05/08/2003, 14:59
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Problemas con una sentencia MySQL

Hola, tengo un problema que no logro solucionar, paso a explicarlo:


Tengo una tabla donde se almacenan los artículos, otra donde se almacenan los pedidos y en otra tabla donde se almacenan los pedidos junto a sus articulos.Por ejemplo:

tabla articulo

0001 <---- Código de los artículos
0002
0003
0004
0005


tablas pedidos

1111 <--- Código de los pedidos
2222
3333
4444
5555


Tabla para saber los articulos que tiene cada pedido


1111 0002
1111 0003
1111 0004
5555 0001
5555 0002


En esta úlima se puede comprobar que el pedido "1111" tiene tres artículos que son: "0002","0003","0004". Y el pedido "5555" tiene dos artículos: "0001" y "0002".


Bien, permito modificar los pedidos de manera que si quiero modificar el pedido "1111" añadiendole otros artículos, debería darse como opción UNICAMENTE los artículos "0001" y "0005", ya que esos son los únicos que le faltan y que tengo registrados en mi tabla.


Pues para llevar a cabo esta acción construyo la siguiente sentencia en MySQL:

$query_Recordset1 ="SELECT a.CODARTICULO FROM articulo a, articulo_pedidosp ap WHERE a.CODARTICULO <> ap.CODARTICULO AND ap.CODPEDIDO_P =$_POST['CODPEDIDO']";



a=tabla articulo

ap=Tabla para saber los articulos que tiene cada pedido



En la que se dice que se cojan todos aquellos registros de la tabla artículo cuyo código no esté ya en el pedido al que se lo quiero añadir. Pues bien, esto no funciona, sale mal y no sé que es lo que pasa porque la sentencia me parece que eatá correcta.

A ver si alguien sabe lo que pasa. Gracias y un Saludo.

Última edición por dominguez; 05/08/2003 a las 15:03
  #2 (permalink)  
Antiguo 06/08/2003, 02:36
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
La sentencia que has usado no es correcta, pues si el pedido es el 5555, te devuelve
0001
0002
0003
0003
0004
0004
0005
0005

El problema para hacer lo que quieres es que el MySql, en las versiones estables actuales, no admite una subselect , que sería la forma normal de hacerlo:
select codarticulo from articulo
where codarticulo not in
(select codarticulo
from articulo_pedido
where pedido = $pedido)

Esto parece que se solucionará con la versión que actualmente están desarrollando (existe una alfa).

La solución que te queda es guardar en una variable todos los códigos de articulo usados en un pedido,
select codarticulo from articulo_pedido where pedido=$_POS['codpedido']
y después montar una instrucción del estilo:
select codarticulo from articulo where codarticulo not in ($variable)

Espero que te sirva.

Última edición por Vice; 06/08/2003 a las 02:40
  #3 (permalink)  
Antiguo 06/08/2003, 02:52
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Código PHP:
numfilas=0;
filas=0;
codarts="";
$result=mysql_query("select codarticulo from articulo_pedido where pedido=$_POS['codpedido']");
numfilas=mysql_num_rows($result);
while ( 
$row=mysql_fetch_array($result) )
{
          
$filas+=1;
          
$codarts=$codarts."'".$row["codarticulo"]."'";
          if (
$numfilas and $filas $numfilas )
                 
$codarts.=",";
}
$result2=mysql_query("select codarticulo from articulo_pedido where codpedido=$_POST['CODPEDIDO'] and codarticulo not in '$codarts'"); 
  #4 (permalink)  
Antiguo 06/08/2003, 15:12
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Hola, muchas gracias por la respuesta, funciona perfectamente

Veia tan clara mi sentencia que no sabía que podía estar mal.

A lo que tu has puesto le tuve que añadir:


$codarts = "(" . $codarts . ")";

antes de darsela a la sentencia, sino me daba fallo, por lo visto los valores tienen que ir entre paréntesis.


Un saludo.
  #5 (permalink)  
Antiguo 07/08/2003, 01:41
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Pues si es así , se me escaparon los paréntesis .
Los había dejado para poner en la última sentencia sql y al final me olvidé de ponerlos.
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 10:00.