【发布时间】:2015-01-01 12:44:45
【问题描述】:
我有一个 MySQL 查询,直接在我的本地 MySQL 数据库上执行时可以正常工作,但通过 PHP 执行时显示不同的结果。
SELECT a.id, a.title, a.public, a.sysstamp, a.password, t.thumbURL, t.count
FROM 0_lychee_albums AS a
LEFT JOIN (SELECT id, album, thumbURL,
@num := IF(@group = album, @num + 1, 0) AS count,
@group := album AS dummy
from 0_lychee_photos
WHERE album != 0
ORDER BY album, star DESC) AS t ON a.id = t.album
WHERE count <= 2 OR count IS NULL;
或作为单行:
SELECT a.id, a.title, a.public, a.sysstamp, a.password, t.thumbURL, t.count FROM 0_lychee_albums AS a LEFT JOIN (SELECT id, album, thumbURL, @num := IF(@group = album, @num + 1, 0) AS count, @group := album AS dummy FROM 0_lychee_photos WHERE album != 0 ORDER BY album, star DESC) AS t ON a.id = t.album WHERE count <= 2 OR count IS NULL;
结果:
| id | title | public | sysstamp | password | thumbURL | count |
| 71 | [Import] 01 | 0 | 1415091268 | NULL | cad008943372d984a9b74378874128f8.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415091268 | NULL | 7b832b56f182ad3403521589e2815f67.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415091268 | NULL | f058f379ce519f1d8a2ff8c0f5003631.jpeg | 1 |
| 72 | [Import] 9n401238 | 0 | 1415091268 | NULL | a4d59377bed059e3f60cccf01a69c299.jpeg | 2 |
| 73 | Untitled | 0 | 1415114200 | NULL | NULL | NULL |
PHP 结果:
| id | title | public | sysstamp | password | thumbURL | count |
| 71 | [Import] 01 | 0 | 1415091268 | NULL | cad008943372d984a9b74378874128f8.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415091268 | NULL | 7b832b56f182ad3403521589e2815f67.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415091268 | NULL | f058f379ce519f1d8a2ff8c0f5003631.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415091268 | NULL | a4d59377bed059e3f60cccf01a69c299.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415092318 | NULL | 7b832b56f182ad3403521589e2815f67.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415092369 | NULL | cad008943372d984a9b74378874128f8.jpeg | 0 |
| 72 | [Import] 9n401238 | 0 | 1415092369 | NULL | 84030a64a1f546e223e6a46cbf12910f.jpeg | 0 |
| 73 | Untitled | 0 | 1415114200 | NULL | NULL | NULL |
a) count 没有像应有的那样增加
b) 因为 a) 它显示的行数超过了应有的行数(每个 id 应限制为 3)
我检查了多次,两个查询完全一样。 PHP 中没有用户输入或任何差异。
我已经检查过similar questions,但他们都没有帮助。以下查询在 MySQL 和 PHP 上显示相同的结果:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
有人知道造成这种差异的问题吗?
编辑更多信息:
$database = new mysqli($host, $user, $password, $database);
$query = "SELECT a.id, a.title, a.public, a.sysstamp, a.password, t.thumbURL, t.count FROM 0_lychee_albums AS a LEFT JOIN (SELECT id, album, thumbURL, @num := IF(@group = album, @num + 1, 0) AS count, @group := album AS dummy FROM 0_lychee_photos WHERE album != 0 ORDER BY album, star DESC) AS t ON a.id = t.album WHERE count <= 2 OR count IS NULL";
$albums = $database->query($query);
while ($album = $albums->fetch_assoc()) { print_r($album); }
在执行查询之前,我也尝试过使用和不使用以下内容:
$database->set_charset('utf8');
$database->query('SET NAMES utf8;');
【问题讨论】:
-
num_rows() 函数告诉你什么?
-
一个衬里或格式化的 sql 不可能有这么大的不同,你应该检查你的代码。我觉得有什么东西在那里。您查询的唯一区别是
, star DESC,但我认为这不会有所不同 -
确保您的 PHP 代码指向您正在运行此查询的同一个数据库
-
@Ram Sharma Mistake 通过创建此问题(现已更新)。 1:1 一样。既是一个班轮,也是 MySQL 和 PHP 中的原始语句。我还尝试使用程序进行比较。
-
@Amal Murali 它返回 8,因为通过 PHP 执行时有 8 行。
标签: php mysql sql mysqli mysql-variables