0

これは私の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 句を使用してこのクエリを実行するにはどうすればよいですか?

お手伝いありがとうございます

4

3 に答える 3

1

API 関数である$GLOBALS['TYPO3_DB'] -> sql_query()を使用できます。ネイティブの mysql 関数は避ける必要があります。nativ mysql-functions を使用している場合、TYPO3 6.2 への更新時に警告なしでトラブルが発生します。API 関数を使用すると、廃止された場合に Info を取得できます。

于 2013-10-16T07:14:02.300 に答える
-1

ドキュメントにあるように、HAVING キーワードの後に​​ where 条件が続きます。( http://dev.mysql.com/doc/refman/5.0/en/select.html ) これは、MySQL が "min(starttime)" 式を where 条件として解釈し、それを 1 (真) と評価していることを意味します。 min(starttime) のゼロ以外のすべての正の値。

たとえば、"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 条件です。

于 2013-10-15T19:37:53.813 に答える