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".

È stato utile?

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!
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top