Pregunta

Tengo dos tablas: Tiendas y artículos. La relación es: tiendas 1 --- * Elementos

En PHP / MySQL lo que sería la mejor manera (más rápido / más simple) para comprobar si un elemento pertenece o no a una tienda en particular.

En otras palabras dadas por ejemplo:

$store_id = 1;
$item_id = 12;

Quiero comprobar si el artículo 12 pertenece a almacenar 1 (y no alguna otra tienda).

Por lo general no una selección en productos que emparejan tanto el store_id y item_id y limitar los resultados a 1. A continuación, comprobar el número de filas (0 o 1) se volvió con mysql_num_rows. ¿Hay una mejor manera?

Actualización:

Las dos tablas tienen una columna "ID". La tabla de artículos tiene una columna "store_id".

¿Fue útil?

Solución

SELECT COUNT(*) AS count
FROM stores JOIN items USING(store_id)
WHERE item_id = 12
  AND store_id = 1

A continuación, se obtendría los resultados, y comprobar de count > 0 o no. Sin embargo, si yo estoy poniendo su derecho de diseño DB, entonces usted tiene un muy mal estado de base de datos.

A partir de lo que usted describe, un elemento sólo puede existir en una tienda. Así que mi conjetura de la disposición general en este caso sería la siguiente:

STORE            ITEM
-----            ----
store_id ---|    item_id
store_name  |--- store_id
...              item_name
                 ...

¿Es esto correcto? Un artículo nunca puede existir excepto en la tienda? Por lo tanto si se trata de un destornillador, cada tienda necesitaría un item_id diferente para sostenerlo?

Un diseño mejor sería:

STORE            STORE_ITEM         ITEM
-----            ----------         ----
store_id ------- store_id   |------ item_id
store_name       item_id ---|       item_name
...                                 ...

Con una consulta de

SELECT COUNT(*)
FROM store JOIN store_item USING(store_id)
     JOIN item USING(item_id)
WHERE store_id = 1
  AND item_id = 12

Otros consejos

  

Ambos cuadros tienen un id, productos que tiene un store_id

SELECT COUNT(*) FROM Items WHERE store_id = $store_id AND id = $item_id
$r = mysql_query("select NULL from Item where storeID = '$store_id' and ItemID = '$item_id'");

if (mysql_fetch_row($r))
{
    it belongs...
}

Para la diversión, que va a lanzar en un cheque de una sola línea:

// if item belongs to store
if (current(mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM Items WHERE store_id = $store_id AND id = $item_id"), MYSQL_NUM)))) {
    // it belongs!
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top