我使用这里的 mysqli 类:https://github.com/joshcam/PHP-MySQLi-Database-Class
...这个原始查询出现问题:
$q = mysql_query("SELECT id, value, (
SELECT COUNT( * )
FROM ".$dbprefix."pages
WHERE roles = ".$dbprefix."roles.id
)count
FROM '".$dbprefix."roles' ORDER by id ASC");
$result = $db->rawQuery ($q);
它不起作用,我在 MysqliDb.php 的第 776 行准备查询时遇到 fatal error - mysql 查询本身可以工作,但是当我将它与 mysqli 类一起使用时,它不起作用。我相信这与 COUNT (*) 或条纹标签或......其他东西有关。我尝试了几件事,但我坚持了下来。也许我不是唯一遇到这个问题的人——也许有人可以帮忙?这太好了!谢谢指教!
最佳答案
由于您使用的是 PHP-MySQLi-Database-Class,因此无需手动弄乱表前缀 - 只需使用 $db->setPrefix(...)
设置即可。
然后,当您选择的库直接执行此操作时,请不要执行 mysql_query(...)
(无论如何,该操作已被弃用!)。 rawQuery()
正在查找包含 SQL 查询的字符串,而不是 mysql_query()
返回的语句。
最后,尽可能避免子查询并替换为各种类型的JOIN
- 更好的性能和更好的可读性。一般来说,人们会过度使用子查询 - 每当您受到子查询的诱惑时,就养成尝试找出 JOIN
解决方案的习惯。有时你必须使用子查询,但大多数时候不是......
$db->setPrefix ($dbprefix);
$sql = "SELECT id, value, COUNT(pages.roles) AS c
FROM roles
LEFT JOIN pages ON pages.roles = roles.id
ORDER by id ASC"
$result = $db->rawQuery($sql);
关于php - SQL SELECT COUNT rawQuery 与 PHP-MySQLi-Database-Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28972512/