PHP / MySQL: Comprobar si algo 'pertenece a' otra cosa?
-
02-10-2019 - |
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".
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!
}