PHP / MySQL: controllare se qualcosa 'appartiene a' qualcos'altro?
-
02-10-2019 - |
Domanda
Ho due tabelle: Negozi ed elementi. La relazione è: Negozi 1 --- * Voci
In PHP / MySQL quale sarebbe il modo migliore (più veloce / semplice) per verificare se un particolare elemento appartiene a un negozio particolare.
In altre parole date, ad esempio:
$store_id = 1;
$item_id = 12;
voglio verificare se articolo 12 appartiene a memorizzare 1 (e non qualche altro negozio).
Di solito faccio un selezionare su I prodotti che uguagliano sia lo STORE_ID e item_id e limitare i risultati a 1. Poi controlla quante righe (0 o 1) sono stati restituiti con mysql_num_rows. C'è un modo migliore?
Aggiornamento:
Entrambe le tabelle hanno una colonna "id". La tabella degli elementi ha una colonna "STORE_ID".
Soluzione
SELECT COUNT(*) AS count
FROM stores JOIN items USING(store_id)
WHERE item_id = 12
AND store_id = 1
Poi si otterrebbe i risultati, e verificare di count > 0
o meno. Tuttavia, se sto ricevendo il vostro disegno destra DB, allora avete un molto incasinato database.
Da ciò che si descrive, un elemento può esistere solo in un negozio. Quindi la mia ipotesi del layout generale qui sarebbe come questo:
STORE ITEM
----- ----
store_id ---| item_id
store_name |--- store_id
... item_name
...
È corretto? Un elemento non può mai esistere se non in un negozio? Quindi, se si tratta di un cacciavite, ogni negozio avrebbe bisogno di un item_id
diversa per tenerlo?
Un design migliore sarebbe:
STORE STORE_ITEM ITEM
----- ---------- ----
store_id ------- store_id |------ item_id
store_name item_id ---| item_name
... ...
Con una query di
SELECT COUNT(*)
FROM store JOIN store_item USING(store_id)
JOIN item USING(item_id)
WHERE store_id = 1
AND item_id = 12
Altri suggerimenti
Entrambe le tabelle hanno un id, prodotti che ha 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...
}
Per divertimento, mi butto in un controllo one-liner:
// 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!
}