dire che ho un database che ha la gente, negozi di alimentari, e gli articoli si possono acquistare in negozio, in questo modo:molti-a-molti e molti-a-molti incroci
Stores People Foods
----------------- ------------------ ------------------
| id | name | | id | name | | id | name |
----------------- ------------------ ------------------
| 1 | Giant | | 1 | Jon Skeet | | 1 | Tomatoes |
| 2 | Vons | | 2 | KLee1 | | 2 | Apples |
| 3 | Safeway | ------------------ | 3 | Potatoes |
----------------- ------------------
Ho un ulteriore tavolo che tenere traccia di quali negozi vendono ciò:
Inventory
--------------------
| store_id| food_id|
--------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
--------------------
E ho un altro tabella che ha liste della spesa su di esso
Lists
---------------------
| person_id| food_id|
---------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 3 |
---------------------
mio la domanda è, data una persona, o il loro id, qual è il modo migliore per capire a quali negozi possono andare in modo da ottenere tutto nella loro lista. Esiste uno schema per questi tipi di calcoli in MySQL?
Il mio tentativo (molto brutto e disordinato) è qualcosa di simile:
-- Given that _pid is the person_id we want to get the list of stores for.
SELECT stores.name, store_id, num, COUNT(*) AS counter
FROM lists
INNER JOIN inventory
ON (lists.food_id=inventory.food_id)
INNER JOIN (SELECT COUNT(*) AS num
FROM lists WHERE person_id=_pid
GROUP BY person_id) AS T
INNER JOIN stores ON (stores.id=store_id)
WHERE person_id=_pid
GROUP BY store_id
HAVING counter >= num;
Grazie per il vostro tempo!
Modifica SQL Fiddle with Data
Grazie per la pubblicazione della tabella DDL/DML ma sarebbe ancora meglio se è stato creato un modello di lavoro su [SQL violino] (http://sqlfiddle.com/) – Taryn
come tale? http://sqlfiddle.com/#!2/83667/6 – KLee1
Perfetto, grazie! :) – Taryn