我不知道这有解决方案,或者我不知道要使用哪个搜索词。这是我的问题。我有 4 张 table
。哪些是
可用
- 可用日期。School_menu
- 哪个菜单属于哪个学校。菜单
- 由项目组成的菜单。Item
- 常用订购项目。
我一直在使用下面的查询来生成可用日期。所以有人可以订购单一约会。例如:2015-12-17
SELECT DISTINCT
*
FROM Available AS a
JOIN School_menu AS sm ON a.school_menu_id = sm.school_menu_id
JOIN Menu AS m ON m.menu_id = sm.menu_id
JOIN Item AS it ON m.menu_id = it.menu_id
WHERE ( a.available_date BETWEEN '2015-12-27'
AND '2016-02-05' )
AND sm.sch_id = '7';
<小时/>
最近,我被告知要添加另一个功能。详细来说,
项目,
- 披萨
- 潜艇
如果用户可以在 12 月 12 日订购披萨,那么再次按一下按钮应该就可以在未来几天内订购披萨。 13 日或 14 日是否有披萨,可通过加入菜单的可用日期进行查询。 1 件不是问题。 2 件怎么样?我该如何为此编写查询?乍一看似乎并不复杂。所以,我写了一个查询
SELECT DISTINCT
*
FROM Available AS a
JOIN School_menu AS sm ON a.school_menu_id = sm.school_menu_id
JOIN Menu AS m ON m.menu_id = sm.menu_id
JOIN Item AS it ON m.menu_id = it.menu_id
WHERE ( a.available_date BETWEEN '2015-12-27'
AND '2016-02-05' )
AND sm.sch_id = '7'
AND it.item_id IN ( 28, 31 )
AND a.available_date != DATE(( '2016-01-05' ));
就这样搞乱了整个订购系统。
如何编写正确的查询!!谢谢
<小时/>已添加,SQL Fiddle http://sqlfiddle.com/#!9/3f44d/1
最佳答案
我能够通过将可用日期分组在一起并计算组的计数并动态调整拥有计数来修复此查询。
<小时/>SELECT DISTINCT *, COUNT(*)
FROM Available AS a JOIN School_menu AS sm ON
a.school_menu_id = sm.school_menu_id JOIN Menu AS m ON
m.menu_id = sm.menu_id JOIN Item AS it ON m.menu_id = it.menu_id
WHERE (a.available_date BETWEEN '2015-12-27' AND '2016-02-05')
AND sm.sch_id = '7' AND it.item_id IN (26, 25, 28)
AND a.available_date != DATE(('2016-01-04')) GROUP BY a.available_date
HAVING COUNT (a.available_date) > XX
xx = Dyamic Count
关于mysql - sql 查询查找可用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350148/