2010-06-14 29 views
5

Estoy tratando de crear un sistema simple de solicitud de inventario. Un usuario puede ingresar múltiples SKU que consultarán la base de datos de inventario.¿Asociar múltiples consultas MySQL con PHP?

Mi problema es que estoy tratando de hacer es asociar estas consultas múltiples a un tipo de lista. Esta lista puede recuperarse más tarde y contiene todas las consultas que se enviaron simultáneamente. Cuando la lista está llena, puede ser eliminada.

¿Esto es posible? Solo estoy buscando que me apunten en la dirección correcta.

Gracias

+0

¿qué tipo de lista quieres? ¿Quieres guardarlo en DB o en alguna otra lista? – 1s2a3n4j5e6e7v

+0

almacenarlo en la misma base de datos estaría bien. – cds5059

Respuesta

0

hacer una tabla como la siguiente:

ListNumber SKU 
1   5423 
1   5432 
1   6542 
1   6543 
2   5411 
3   6542 
3   5411 
3   5423 

Después, simplemente recuperar el SKU de la lista 1 haciendo:

SELECT SKU FROM Table WHERE ListNumber=1; 
+0

¿cómo agregaría estos SKU a la lista simultáneamente para que todos ellos contengan el mismo número de lista? – cds5059

+0

Usando la ID de sesión como la clave podría ser más sensata (esto también proporciona una limpieza a través de la cosechadora de sesión), pero tenga en cuenta las implicaciones de múltiples ventanas en la misma sesión. – symcbean

0

se puede utilizar el (listNo, SKU, fecha y hora) estructura de la mesa. Timestamp lo ayudará a analizar cómo y cuándo se hace una consulta en su Inventario y esas cosas.

+0

Me gusta la idea Timestamp. ¿Cómo agregaría todas las consultas al mismo tiempo para que contengan la misma marca de tiempo? Múltiples SKU son consultados al mismo tiempo – cds5059

+0

sí. ¿Por qué querría estar limitado a "la misma hora"? Solo dale la función now(). Obtendrá la marca de tiempo de la inserción. – 1s2a3n4j5e6e7v

+0

almacenará la lista No en la sesión para que siempre esté agregando a la lista correcta. O si los usuarios tienen varias sesiones abiertas, use alguna otra identificación única, como la dirección IP, o el nombre de usuario/inicio de sesión, etc. – Steve

1

Si entiendo el problema correctamente, está buscando una consulta para recuperar datos cuando alguien busca varios SKU en una tabla. ¿Es eso correcto? Consulte la consulta a continuación si es.

SELECT some_data FROM some_table WHERE sku IN ('SSDF3','GHG56',...'HG09'); 
0

De alguna manera puedo ver lo que quiere aquí. Desea asegurarse de tener varias inserciones y de alguna manera asegurarse de que tengan algún tipo de identificación consistente asociada con cada transacción. Si toma el enfoque de la marca de tiempo, no hay garantía de que se inserten todos en el mismo segundo.

Es muy difícil tener filas insertadas simultáneamente en MySQL, pero tengo una sugerencia que podría funcionar. Estoy pensando que deberías comenzar una transacción, encontrar el siguiente número de identificación más alto e insertar todas esas filas después.

  1. $transRes = mysql_query("START TRANSACTION");
  2. $nextListRes = mysql_query("SELECT max(listNumber) FROM InventoryRequests");
  3. recoger el resultado de $nextListRes y añadir 1.
  4. Run INSERT consultas para el SKU de usar este valor incrementado.
  5. $commitRes = mysql_query("COMMIT");

Usted quiere asegurarse de que esta es una transacción y no dos consultas separadas, porque pueden existir condiciones de carrera, donde dos instancias de su funcionamiento del código PHP puede SELECT al mismo tiempo (algo muy malo!)

Además, estaba pensando en una forma subconsciente de hacerlo, pero eso haría que cada instrucción INSERT tenga un MAX(listNumber) diferente cada vez que se ejecute, lo que significa que no tendrá la misma ID que usted gustaría. Es posible que desee examinar las declaraciones preparadas para el INSERT s si necesita que sean un poco más rápidas, también :)

0

No estoy seguro lo entiendo, pero parece que está intentando construir un carrito de compras o un sistema de cumplimiento de orden rudimentario?

Si ese es el caso, quizás cree otra tabla que almacene los "pedidos" y una lista separada por comas (similar a la respuesta de Sjoerd, pero no tendría que preocuparse por determinar la lista de ID por adelantado) de SKU que puede más tarde se inyectará en una cláusula IN() (según gsharma). Los "pedidos" podrían eliminarse posteriormente o marcarse como inactivos o algo así.

1

Deberá asociar la tabla con otra tabla en la base de datos, donde será una tabla de muchas a muchas que unirá tanto la tabla de inventario como la lista de tipos en función de la clave externa correspondiente a SKU.

YOU CAN QUERY THE FOLLOWING 
SELECT inventory.* FROM inventory LEFT JOIN InvLinkedList ON InvLinkedList.SKU = Inventory.SKU WHERE InvLinkedList.typeID = 2 

Usted tendrá que tener la tabla de inventario con todos los elementos, una mesa con InventoryType Identificación y tipo que la columna y una conexión de muchos a muchos InvLinkedList tabla con dos columnas indexados (SKU) y el tipo de identificación. Deberá definir la relación de estas tablas, donde ON DELETE, CASCADE en la lista de tipos. De modo que cada vez que elimine un tipo eliminará las filas con typeID en InvLinkedList pero no eliminará el elemento en Inventory. Lo contrario ocurrirá cuando elimines un artículo con SKU.

Espero que esta sea la solución. En cuanto al tipo múltiple, puede crear una función PHP para devolver la consulta mencionada anteriormente con un tipo definido.