2017-08-17 86 views
-1

所以我有两个表fooditems https://ibb.co/c2xrxF和order_fooditems(其中包含所有订购的食物)https://ibb.co/dEZJBa我怎样才能得到食物表中的所有食品这是在特定的类别中,max_plates是大于订购的食物项目数量,递送预先通知也大于当前时间。纠正复杂的SQL查询有正确的结果

例如,如果可供食物项目使用的最大盘子数量为5块,而且已经订购了4块盘子,则只能订购该盘子的另外1块盘子。如果5块板已责令那么这道菜不应该出现在result.Tried这个SQL查询,但没有得到任何结果

$value = date('Y-m-d H:i:s'); 
$query="SELECT * from fooditems where category_id = {$category['id']} and id in (SELECT * FROM fooditems fi JOIN order_fooditems ofi ON fi.id = ofi.fooditems_id WHERE fi.max_plates > ofi.quantity and (fi.delivery- fi.advance_notice)>('$value')"; 

试过整整一天,但无法找出正确的query.Any建议将是很好的帮助。谢谢。

+1

叹息......不要使用数据图像,只是将一些数据包含为可分析文本,然后才能使用。如果这样做了,那么我们可以运行查询来测试建议的答案。此外,如果使用图像,则将它们嵌入到问题中,而不是某些远程服务器 –

+0

...并且请以可读方式对该代码进行格式化。请给出一些实际运行的SQL代码 - 这不会解析。并解释“没有得到任何结果”。请阅读并在[mcve]上采取行动。 – philipxy

回答

0

这可能会帮助你。我认为如果您尝试使用下面的查询,您可以自己计算delivery-advance_notice。

SELECT *,SUM(order_fooditems.quantity) AS totalqtyOrdered 
FROM fooditems INNER JOIN order_fooditems ON fooditems.id=order_fooditems.fooditems_id 
where category_id = {$category['id']} 
GROUP BY fooditems.id 
HAVING SUM(order_fooditems.quantity) < fooditems.max_plates 

来获取在没有任何订单还的项目,使用LEFT JOIN和添加其他OR条件having子句

SELECT *,SUM(order_fooditems.quantity) AS totalqtyOrdered 
FROM fooditems LEFT JOIN order_fooditems ON fooditems.id=order_fooditems.fooditems_id 
where category_id = {$category['id']} 
GROUP BY fooditems.id 
HAVING (SUM(order_fooditems.quantity) < fooditems.max_plates) OR (order_fooditems.fooditems_id IS NULL); 

在但是,如果你需要ITEMNAME单独的结果,你需要将上述查询放入子查询中

SELECT itemName FROM 
(SELECT a.id,a.max_plates,a.itemName,b.fooditems_id FROM fooditems a LEFT JOIN order_fooditems b ON a.id=b.fooditems_id GROUP BY a.id HAVING (SUM(b.quantity) < a.max_plates) OR (b.fooditems_id IS NULL)) 
AS subqueryTable; 
+0

@Praveen得到解析错误:语法错误,意外的T_VARIABLE在C:\ xampp \ htdocs \ brestomine \ customer \ editorder.php 105行上 – yogeshmanjhi

+0

这个错误与PHP不是MySQL有关。我试过我的查询没有交付advance_notice,它执行完美。请检查您的PHP代码是否正确。您可能会在查询结尾丢失一些分号@yogeshmanjhi –

+0

@Praveen查询正在运行,但给出的结果不正确。我已经创建了一个新的订单,并且没有添加任何项目,屏幕显示我可以订购2个项目。 – yogeshmanjhi