我在输出所需数据时遇到问题:
$start_of_month = mktime(00, 00, 00, date('m'), 01);
$datestart = date("Y-m-d H:i:s",$start_of_month);
'SELECT
orderheader.ordernumber
, ccilog.sessionid
, ccilog.orderid
, orderheader.userid
, users.emailaddress
, orderheader.webbrandcode
, orderitems.productcode
, orderitems.productname
, orderheader.datecreated
, ccilog.formattedpaymentdate
, orderheader.voucherpromotioncode
, orderheader.vouchercode
, orderheader.itemtotalsell
, orderheader.shippingtotalsell
, orderheader.totalbeforediscount
, orderheader.voucherdiscountvalue
, orderheader.totaldiscount
, orderheader.totalsell
, orderheader.totaltax
, orderheader.total
, orderitems.subtotal
, orderitems.discountvalue
, ccilog.amount
FROM orderheader
LEFT JOIN ccilog ON orderheader.id=ccilog.orderid
LEFT JOIN orderitems ON ccilog.orderid=orderitems.orderid
LEFT JOIN users ON orderheader.userid=users.id
WHERE ccilog.formattedpaymentdate > "'.$datestart.'"'我有一个脚本可以将此查询转换为csv文件。整个脚本运行得很好,直到我放入where语句,我没有得到我想要的东西。
我有三行包含的日期晚于月份日期$datestart的开始日期,但由于某种原因,只显示了其中的两行,我就是想不通为什么?
我的日期以相同的格式设置为$datestart (例如2011-07-07 13:31:28),3行的日期相同,但时间略有不同,大约相隔4分钟。
我卡住了,有人能给我点建议吗?
谢谢
编辑:数据如下:
---- Orderheader -
row1 id:122
row2 id:123
row3 id:124
---- ccilog -
Row1 orderid:122 formattedpaymentdate:2011-07-07 13:23:52
Row2 orderid:123 formattedpaymentdate:2011-07-07 13:28:24
Row3 orderid:124 formattedpaymentdate:2011-07-07 13:31:28 我确信该类型是date类型,但无法确定如何查看它。
发布于 2011-07-15 20:46:35
将WHERE条件移到ON子句中:
LEFT JOIN
ccilog
ON ccilog.orderid = orderheader.id
AND ccilog.formattedpaymentdate > $datestart在连接之后(逻辑上)对WHERE求值,因此过滤器应用于由LEFT JOIN生成的NULL值,并且条件永远不成立。
发布于 2011-07-15 21:10:21
如果问题真的是您所描述的,那么我猜ccilog中符合条件的三行中有一行的orderid在orderheader表中没有对应的id (如果您想要包含它,那么您确实需要在这些表之间进行右连接,而不是左连接...)。
否则,我支持Quassnoi,因为将JOINing留给表,然后指定WHERE条件,该表中的列必须为非空,这是没有多大意义的。
实际上,我们需要查看您的数据来弄清楚到底发生了什么--至少是主键/外键和formattedpaymentdate列,包括所涉及的类型(例如,如果formattedpaymentdate实际上是日期类型列而不是字符列,这可能会使问题变得混乱。)
https://stackoverflow.com/questions/6707135
复制相似问题