使用 BETWEEN 与 JOIN php/mysql 时不显示结果
Posted
技术标签:
【中文标题】使用 BETWEEN 与 JOIN php/mysql 时不显示结果【英文标题】:No results displayed when using BETWEEN with JOIN php/mysql 【发布时间】:2015-01-19 20:59:52 【问题描述】:由于某种原因,我无法让 php/mysql 使用 between 选项进行 JOIN。我是不是又在看东西了?
当我运行这个脚本时,我得到的只是一个没有错误的页面......?
任何想法都会有所帮助!
$start = date("m/1/Y");
$end = date("m/31/Y");
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('ID', 'P.O #', 'Date', 'To', 'Time', 'Vin', 'Reason', 'Amount', 'Employee #', 'Mananger', 'Account #', 'Store Location', 'Borrowed', 'verified','Adjustment','Adjustment by','','VOID','Emp Name'));
mysql_connect('*********', '**********', '***********');
mysql_select_db('donavons_car_scanner');
$rows = mysql_query('SELECT fpo.*, users.name FROM fpo WHERE date BETWEEN '" . $start . "' AND '" . $end . "' LEFT OUTER JOIN users ON (fpo.empnum = users.empnum)');
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
谢谢!
【问题讨论】:
【参考方案1】:你把JOIN
放错地方了,你想在添加条件之前加入表格 -
SELECT fpo.*, users.name
FROM fpo
LEFT OUTER JOIN users
ON (fpo.empnum = users.empnum)'
WHERE date BETWEEN '" . $start . "' AND '" . $end . "'
你真的应该stop using mysql_*
functions。** 它们不再被维护并且是officially deprecated。改为了解prepared statements,并**使用PDO。
【讨论】:
【参考方案2】:除了 Jay 的回答(因为我无法评论),mysql 日期预计在 yyyy-mm-dd。
The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.
-http://dev.mysql.com/doc/refman/5.1/en/datetime.html
$start = date("m/1/Y");
$end = date("m/31/Y");
应该是
$start = date("Y/m/1");
$end = date("Y/m/31");
【讨论】:
以上是关于使用 BETWEEN 与 JOIN php/mysql 时不显示结果的主要内容,如果未能解决你的问题,请参考以下文章
标准 SQL:使用 BETWEEN 通过两个条件进行 LEFT JOIN
Mysql Inner join,Where,Between 在多个表中
SQL join操作中BETWEEN、WHERE和ON的区别
在 CTE 中使用 Order By 和 Left or right join