Запрос запускается в phpmyadmin, но не через приложение - PullRequest
0 голосов
/ 27 ноября 2010

Привет, у меня возникла интересная проблема.

Обновление: Судя по комментариям, которые я привожу ниже, это проблема попыток выполнить несколько запросов одновременно. Я предполагал, что, поскольку я делал это в phpmyadmin, тогда все было хорошо. Как выполнить несколько запросов? Я использую mysqli? Я использую mysql 5.x и использую mysqli

Я запускаю свой запрос из своего приложения, и если запрос не работает, я отображаю его на экране. Наряду с ошибкой is

Когда я запускаю свое приложение, на экран выводится мой запрос и эта ошибка.

У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'ALTER TABLE tmp_bulletins ADD INDEX (bb_id); в строке 13

Когда я копирую запрос, который был выведен на экран, и запускаю его в phpmyadmin, он работает нормально каждый раз. Затем я попытался вывести запрос, который был выведен на экран, и запустить его в базе данных через мое приложение, и он не работает.

Насколько я могу судить, точно такой же запрос (тот, который был напечатан на мой экран) работает через phpmyadmin, но не через мое приложение.

Есть ли причина, по которой это может произойти? Вносит ли phpmyadmin некоторые изменения в запрос, прежде чем он запустит его в базе данных?

Вот запрос

CREATE TEMPORARY TABLE tmp_bulletins

                   SELECT {$table}.id AS bb_id,count(bb_replies.id) AS num_responses,bb_locations.title AS location,bb_locations.description AS location_description,bb_categories.title AS category,bb_categories.description AS category_description,Concat(users.first_name,' ',users.last_name) AS full_name,users.first_name AS first_name,users.last_name as last_name,users.id AS user_id,{$table}.title AS post_title,{$table}.content,{$table}.created_date,{$table}.rank 
                   FROM `{$table}` 
                   LEFT JOIN bb_locations ON {$table}.bb_locations_id = bb_locations.id
                   LEFT JOIN bb_categories ON {$table}.bb_categories_id = bb_categories.id
                   LEFT JOIN users ON {$table}.users_id = users.id
                   LEFT JOIN bb_replies ON {$table}.id = bb_replies.bbs_id
                   WHERE `bb_locations_id` IN ({$locations_csv}) AND `bb_categories_id` IN ({$categories_csv}) {$addWhere}
                   GROUP BY bb_id,location,location_description,category,category_description,first_name,last_name,user_id,post_title,content,created_date,rank
                   {$order} {$limit} ;

              ALTER TABLE tmp_bulletins ADD INDEX (`bb_id`);


              CREATE TEMPORARY TABLE tmp_ratings      

                   SELECT bbs_id,
                   sum(CASE WHEN user_id = {$user_id} THEN like_dislike_id END) AS thisUsersRating,
                   SUM(CASE WHEN like_dislike_id = 2 THEN 1 ELSE 0 END) AS likes, 
                   SUM(CASE WHEN like_dislike_id = 1 THEN 1 ELSE 0 END) AS dislikes
                   FROM bb_ratings
                   GROUP BY bbs_id;  

              ALTER TABLE tmp_ratings ADD INDEX (`bbs_id`); 

              SELECT * FROM tmp_bulletins
          LEFT JOIN tmp_ratings on tmp_bulletins.bb_id = tmp_ratings.bbs_id;

И запрос, который он производит (редактируя внешний вид, как мы говорим)

    CREATE TEMPORARY TABLE tmp_bulletins 
    SELECT bbs.id AS bb_id,count(bb_replies.id) AS num_responses, 
    bb_locations.title AS
     location,bb_locations.description AS location_description,
    bb_categories.title AS
     category,bb_categories.description AS category_description,
    Concat(users.first_name,' ',users.last_name) AS full_name,
    users.first_name AS first_name,
    users.last_name as last_name,users.id AS user_id,
    bbs.title AS post_title,
    bbs.content,bbs.created_date,bbs.rank FROM `bbs` 
    LEFT JOIN bb_locations ON bbs.bb_locations_id = bb_locations.id 
    LEFT JOIN bb_categories ON bbs.bb_categories_id = bb_categories.id 
    LEFT JOIN users ON bbs.users_id = users.id LEFT JOIN bb_replies ON bbs.id = bb_replies.bbs_id WHERE `bb_locations_id` IN (1,2) AND `bb_categories_id` IN (1,2) 
    GROUP BY bb_id,location,location_description,category,category_description,first_name,last_name,user_id,post_title,content,created_date,rank LIMIT 0,5; ALTER TABLE tmp_bulletins 
    ADD INDEX (`bb_id`); 

    CREATE TEMPORARY TABLE tmp_ratings 
    SELECT bbs_id, sum(CASE WHEN user_id = 1 THEN like_dislike_id END) AS thisUsersRating, SUM(CASE WHEN like_dislike_id = 2 THEN 1 ELSE 0 END) AS likes,
    SUM(CASE WHEN like_dislike_id = 1 THEN 1 ELSE 0 END) AS dislikes FROM bb_ratings GROUP BY bbs_id; 
ALTER TABLE tmp_ratings ADD INDEX (`bbs_id`); 

    SELECT * FROM tmp_bulletins LEFT JOIN tmp_ratings on tmp_bulletins.bb_id = tmp_ratings.bbs_id

Ответы [ 3 ]

2 голосов
/ 28 ноября 2010

Вынь точку с запятой.

1 голос
/ 28 ноября 2010

mysql_query () отправляет уникальный запрос (несколько запросов не поддерживаются) в текущую активную базу данных на сервере, который связан с указанным идентификатором ссылки.

выполняете ли вы несколько запросов водин раз?

РЕДАКТИРОВАТЬ

Ваши запросы сложны, упростите их и выполните запрос за запросом.Чтобы определить проблему.

0 голосов
/ 28 ноября 2010

Было бы хорошо, если бы вы могли показать весь запрос.

Используете ли вы несколько запросов? Если да, это будет работать в PMA, но без PMA это зависит от mysql-версии и -settings, если это может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...