2015-03-10 5 views
0

Я использую класс Mysqli здесь: https://github.com/joshcam/PHP-MySQLi-Database-ClassSQL SELECT COUNT rawQuery с PHP-MySQLi-Database-Class

... и есть проблемы с этим rawquery:

$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); 

Это не работает, Я получаю фатальную ошибку при подготовке запроса в строке 776 в MysqliDb.php - сам mysql-запрос работает, но когда я использую его с классом mysqli, он не работает. Я считаю, что это связано с COUNT (*) или полосатыми тегами или ... что-то. Я пробовал несколько вещей, но я застрял. Может быть, я не единственный человек с этой проблемой - может, кто-то может помочь? Это было бы здорово! Спасибо, совет!

+0

Какая ошибка вы получаете? –

+0

Вы не уверены, что это работает? ist должен быть «SELECT id, value, ([...]) AS count [....]« не так ли? И вы должны, по крайней мере, поместить счет в backticks, потому что это ключевое слово. – steven

+2

Во-первых, почему вы используете 'mysql_query()' здесь? Мое предположение: '$ q' содержит значение' false', а не ваш запрос, представленный как строка (попробуйте 'var_dump ($ q)', ​​чтобы узнать, что вы получаете. Во-вторых, почему вы пытаетесь выполнить подзапрос в инструкции SELECT? Считаете ли вы JOIN? –

ответ

1

Поскольку вы используете 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); 
+0

Пожалуйста, объясните OP (и будущим посетителям SO), почему вы сделали то, что сделали, и как оно решает проблему. –

+0

Потому что это работает ... ;-) Хорошо, я отредактирую и добавлю немного "splain ... –

+0

Лучше, @JayBlanchard? :-) –