php - SQL SELECT COUNT rawQuery 与 PHP-MySQLi-Database-Class

标签 php mysql mysqli

我使用这里的 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/

相关文章:

MySQL:为什么使用 VARCHAR(20) 而不是 VARCHAR(255)?

mysql - SQL Server 中 mysql 的等效语法

PHP-替换字符串中的字符

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - MySQL 行未找到但确实存在

php - 在 PHP $_SESSION 中存储数据不安全吗?

php - 通过索引提高查询性能

php - 在同一台 Apache 服务器上运行 PHP 和 Ruby 有什么问题吗?

php - 获取排除少数用户的特定用户列表

mysql - 一对多关系。必须是比使用子查询更好的方法