Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期之间的左连接,小于_Php_Mysql_Left Join - Fatal编程技术网

Php 日期之间的左连接,小于

Php 日期之间的左连接,小于,php,mysql,left-join,Php,Mysql,Left Join,我有以下选择查询 $sql="SELECT s1.* FROM schedulelocation s1 LEFT JOIN schedulelocation s2 ON (s1.uid=s2.uid AND s1.stp>s2.stp) WHERE s2.stp is NULL AND s1.uid=:s1_uid AND s1.thu=:s1_thu AND s1.start<=:s1_start AND s1.end>=:s1_end"; 假设日期为2015

我有以下选择查询

 $sql="SELECT s1.*
 FROM schedulelocation s1
 LEFT JOIN schedulelocation s2
 ON (s1.uid=s2.uid AND s1.stp>s2.stp)
 WHERE s2.stp is NULL AND s1.uid=:s1_uid AND s1.thu=:s1_thu AND s1.start<=:s1_start AND s1.end>=:s1_end";  
假设日期为2015-10-08,我希望从查询中得到以下答案

对于uid T5632,答案是梨 对于uid T4123,答案是苹果

ie查询应检查所选日期ie 2015-10-08是否在表中的开始日期和结束日期之间,然后选择最低字母stp。它还必须确保这一天是星期四

查询成功找到Pear,但没有uid T4123的结果

你能帮我找到U4123的答案吗

编辑-我现在已尝试分组方式

 $sql="SELECT * FROM (SELECT * FROM schedulelocation WHERE thu=:thu AND start<=:start AND end>=:end ORDER BY stp ) AS cifstp GROUP BY uid ";        

您可以使用ORDER BY和LIMIT 1,无需联接:

SELECT s1.*
FROM
  schedulelocation s1
WHERE
  s1.uid=:s1_uid AND s1.thu=:s1_thu
  AND s1.start<=:s1_start AND s1.end>=:s1_end
ORDER BY
  stp
LIMIT 1

请看。

这有点淘气,但你可以在字符串上使用MAX和MIN

这应该比子查询解决方案快。使用解释检查


谢谢然而,我希望查询运行一次,以生成苹果和梨的答案。我相信用你的小提琴,我需要运行查询不止一次,因为不止一个UIDI已经按照我上面的编辑尝试了分组。看来work@user2635961group by没有文档记录,它可能在当前版本的MySQL上工作,但不能保证它在当前版本的MySQL上始终工作,也不能保证它不会一直工作,只是尝试编辑。你能告诉我在这个例子中如何使用PDO使日期变为变量吗?例如,2015-10-08?@user2635961我用变量更改了常量值,一个是:thu,另一个是:datea和:dateb,包含所选日期。在您的示例中,这两个值都将具有“2015-10-08”值谢谢Wally。我要试试看。努力工作。我如何选择您有评论的所有内容。ie选择*MINcomment?在上面的回答中,我使用了SELECT s1.*谢谢你需要明确的回答-就像你在上面的回答中所做的那样:SELECT s1.*,MINComment。。。您可以使用EXPLAIN SELECT…(解释选择…)检查所有答案的性能:谢谢你的帮助。当我尝试读取结果$movedata=$mysql\u link->prepare$sql时,我现在得到了未定义的索引;$movedata->execute;foreach$movedata->fetchAllPDO::FETCH_ASSOC as$trains4{echo$trains4['uid'];echo$trains4['stp'];echo$trains4['count'];}在哪里定义了计数?看起来不像你原来帖子里的字段?
SELECT s1.*
FROM
  schedulelocation s1
WHERE
  s1.uid=:s1_uid AND s1.thu=:s1_thu
  AND s1.start<=:s1_start AND s1.end>=:s1_end
ORDER BY
  stp
LIMIT 1
SELECT s1.*
FROM
  schedulelocation s1 LEFT JOIN schedulelocation s2
  ON s1.uid=s2.uid
     AND s1.thu=s2.thu
     AND :datea BETWEEN s2.start AND s2.end
     AND s1.STP>s2.STP
WHERE
  :dateb BETWEEN s1.start AND s1.end
  AND s1.thu=:thu
  AND s2.uid IS NULL
SELECT
    s1.*,
    MIN(Comment)
FROM schedule location AS s1
WHERE
    thu = 1 AND
    start <= '2015-10-08' AND
    end >= '2015-10-08'
GROUP BY
    uid