输出我需要的数据时遇到问题:
$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,但出于某种原因,只有2行显示,我只是无法找出原因?
我的日期设置格式为$ 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
我确定该类型是日期类型,但无法确定如何确定。
答案 0 :(得分:0)
将WHERE
条件移至ON
子句:
LEFT JOIN
ccilog
ON ccilog.orderid = orderheader.id
AND ccilog.formattedpaymentdate > $datestart
在连接之后(逻辑上)评估 WHERE
,因此过滤器将应用于NULL
生成的LEFT JOIN
值,并且条件永远不会成立。
答案 1 :(得分:0)
如果问题确实是您的描述方式,那么我猜您ccilog
中符合条件的三行中有一行的orderid
没有相应的id
在orderheader
表中(如果你想包含它,你真的需要在这些表之间加一个正确的JOIN,而不是LEFT JOIN ......)
否则我和Quassnoi在一起,因为LEFT JOIN到一个表然后指定WHERE标准,其中该表中的列必须是非NULL,没有多大意义。
真的,我们需要查看您的数据以确切了解发生了什么 - 至少是主要/外键和formattedpaymentdate
列,包括所涉及的类型(如果formattedpaymentdate
是实际上是日期类型列而不是字符列,例如,这可能会使问题混淆。)