說我有了人,雜貨店和項目,你可以在商店購買,像這樣一個數據庫:許多一對多和多對一的許多十字路口
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 |
----------------- ------------------
我有一個額外的該表用於跟蹤商店賣的是什麼:
Inventory
--------------------
| store_id| food_id|
--------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
--------------------
而且我有上有
Lists
---------------------
| person_id| food_id|
---------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 3 |
---------------------
購物清單另一個表我問題在於,給定一個人或他們的ID,找出他們可以去哪些商店的最佳方式是什麼,以便他們能夠將他們的一切都列入清單。在MySQL中有這些類型的計算模式嗎?
我嘗試(很醜陋和雜亂)是一樣的東西:
-- 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;
感謝您的時間!
感謝張貼表DDL/DML,但如果你創建了一個工作模型,將會變得更好[SQL小提琴(http://sqlfiddle.com/) – Taryn
像這樣? http://sqlfiddle.com/#!2/83667/6 – KLee1
完美,謝謝! :) – Taryn