Typo3如何用having子句执行我的sql查询

时间:2013-10-15 19:30:06

标签: mysql typo3

这是我的SQL查询

select uid,starttime,endtime
from table1
where endtime >= UNIX_TIMESTAMP()
Group by uid
having min(starttime)

当我用phpmyadmin执行查询时,它返回2行。但是当我使用Typo3执行时,查询返回27000行。

$select = "uid,starttime,endtime";
$from ="table1";
$where = "endtime >= UNIX_TIMESTAMP()";
$groupby = "uid having min(starttime)";

$res = $GLOBALS["TYPO3_DB"] -> exec_SELECTquery($select,$from,$where,$groupby);

$sql = $GLOBALS["TYPO3_DB"] -> SELECTquery($select,$from,$where,$groupby);

echo $sql;
echo mysql_num_rows($res);

如果我删除了typo3中的having子句。查询返回2行但不是好行。

如何使用having子句执行此查询?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

看起来exec_SELECTquery()不支持HAVING子句,因此您需要使用完全写出查询。

如果您尝试为每个具有最短开始时间的用户获取行,则正确的查询为:

SELECT uid,starttime,endtime
from table1 t1
JOIN (SELECT uid, min(starttime) minstart
      FROM table1
      where endtime >= UNIX_TIMESTAMP()
      GROUP BY uid) t2
ON t1.uid = t2.uid AND t1.starttime = t2.starttime

答案 1 :(得分:1)

您可以使用$GLOBALS['TYPO3_DB'] -> sql_query()这是一个API函数。你应该避免使用nativ mysql函数。如果您使用nativ mysql函数,在更新到TYPO3 6.2时会遇到麻烦而不会发出警告。如果您使用API​​函数,那么如果不推荐使用它,您将获得一个Info。

答案 2 :(得分:-1)

正如文档所说,HAVING关键字后跟where条件。 (http://dev.mysql.com/doc/refman/5.0/en/select.html)这意味着MySQL将你的“min(starttime)”表达式解释为where条件,并将所有非零正值min(starttime)的值评估为1(真)。

例如,“HAVING count(*)> 10”或“HAVING min(starttime)< now()”或任何在条件更有趣的地方。

所以,在HAVING之后放置你想要的条件,你会得到你想要的任何东西。

请注意,对于任何困惑的人来说,这是一个完整的例子:

select uid,starttime,endtime
from table1
where endtime >= UNIX_TIMESTAMP()
Group by uid
having min(starttime) > datediff(now(), interval 1 week);

在此示例中,“min(starttime)> datediff(now(),interval 1 week)”是HAVING关键字后面的where条件。