Frage

Ich habe zwei Tabellen: Shops und Artikel. Die Beziehung ist: Speicher 1 --- * Items

In PHP / MySQL, was wäre der beste (schnellste / einfachste) Weg, um zu überprüfen, ob ein bestimmtes Element zu einem bestimmten Geschäft gehört.

Mit anderen Worten zum Beispiel gegeben:

$store_id = 1;
$item_id = 12;

Ich möchte prüfen, ob Artikel 12 1 gehört zu speichern (und nicht einen anderen Speicher).

Ich normalerweise auswählen auf Artikel sowohl die store_id passende und ITEM_ID und begrenzen die Ergebnisse zu 1. Prüfen Sie dann, wie viele Zeilen (0 oder 1) mit mysql_num_rows zurückgegeben wurden. Gibt es einen besseren Weg?

Update:

Beide Tabellen haben eine „id“ -Spalte. Die Items-Tabelle hat eine "store_id" Spalte.

War es hilfreich?

Lösung

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

Dann würden Sie die Ergebnisse erhalten, und überprüfen von count > 0 oder nicht. Allerdings, wenn ich bin Ihr DB-Design richtig hinzubekommen, dann haben Sie eine sehr verkorkste Datenbank.

Von dem, was Sie beschreiben, kann ein Element nur in einem Geschäft existieren. Also meine Vermutung des allgemeinen Layouts hier würde so aussehen:

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

Ist das richtig? Ein Element kann immer nur existiert in einem Geschäft? Also, wenn es ein Schraubenzieher ist, müsste jeder Laden eine andere item_id es halten?

Ein besseres Design wäre:

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

Mit einer Abfrage von

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

Andere Tipps

Beide Tabellen haben eine ID, hat Artikel ein 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...
}

Für Spaß, ich in einem Einzeiler Check werfen werden:

// 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!
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top