PHP / MySQL: Vérifiez si quelque chose « appartient à » autre chose?
-
02-10-2019 - |
Question
J'ai deux tableaux: les magasins et les objets. La relation est: Magasins 1 --- * Articles
En PHP / MySQL quelle serait la meilleure façon de vérifier (le plus rapide / simple) si un élément particulier appartient à un magasin en particulier.
En d'autres termes donnés par exemple:
$store_id = 1;
$item_id = 12;
Je veux vérifier si l'article 12 appartient à stocker 1 (et non pas un autre magasin).
Je ne généralement sélectionner sur les points correspondant à la fois la store_id et ITEM_ID et limiter les résultats à 1. Ensuite, vérifiez le nombre de lignes (0 ou 1) ont été retournés avec mysql_num_rows. Est-il possible de mieux?
Mise à jour:
Les deux tables ont une colonne "id". Le tableau Items a une colonne "store_id".
La solution
SELECT COUNT(*) AS count
FROM stores JOIN items USING(store_id)
WHERE item_id = 12
AND store_id = 1
Ensuite, vous obtiendrez les résultats, et la vérification des count > 0
ou non. Cependant, si je reçois votre dessin ou modèle DB, alors vous avez une base de données très foiré.
D'après ce que vous décrivez, un élément ne peut exister que dans un magasin. Donc, je pense de la disposition générale serait comme ici ceci:
STORE ITEM
----- ----
store_id ---| item_id
store_name |--- store_id
... item_name
...
Est-ce exact? Un élément ne peut jamais exister que dans l'un magasin? Donc, si c'est un tournevis, chaque magasin aurait besoin d'un autre item_id
pour le maintenir?
Une meilleure conception serait:
STORE STORE_ITEM ITEM
----- ---------- ----
store_id ------- store_id |------ item_id
store_name item_id ---| item_name
... ...
Avec une requête de
SELECT COUNT(*)
FROM store JOIN store_item USING(store_id)
JOIN item USING(item_id)
WHERE store_id = 1
AND item_id = 12
Autres conseils
Les deux tables ont une carte d'identité, les objets a une 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...
}
Pour le plaisir, je vais jeter un chèque en une ligne:
// 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!
}