У меня этот динамический запрос MYSQL, создающий сводную таблицу, которая работает в phpmyadmin (и SequelPro):
SET SESSION group_concat_max_len = 1000000; SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT 'MAX(CASE WHEN meta_key = "lat_poi" THEN meta_value END) AS lat_poi, MAX(CASE WHEN meta_key = "lng_poi" THEN meta_value END) AS lng_poi' ) INTO @sql FROM wp_postmeta; SET @sql = CONCAT('SELECT posts.post_title, ', @sql, ' FROM wp_posts posts LEFT JOIN wp_postmeta postmeta ON posts.ID = postmeta.post_id WHERE (posts.post_type = "poi" AND posts.post_status = "publish") GROUP BY posts.ID '); PREPARE stmt FROM @sql; EXECUTE stmt;
Я хочу использовать его в Php для запроса базы данных, но он дает эту ошибку:
string(226) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT 'MAX(CASE WHEN meta_key = ' at line 2" bool(false)
Вот код Php:
$connection = mysqli_connect("localhost", "db_name", "db_pwd", "db_user"); $query_expression = " SET SESSION group_concat_max_len = 1000000; SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT 'MAX(CASE WHEN meta_key = \"lat_poi\" THEN meta_value END) AS lat_poi, MAX(CASE WHEN meta_key = \"lng_poi\" THEN meta_value END) AS lng_poi' ) INTO @sql FROM wp_postmeta; SET @sql = CONCAT('SELECT posts.post_title, ', @sql, ' FROM wp_posts posts LEFT JOIN wp_postmeta postmeta ON posts.ID = postmeta.post_id WHERE (posts.post_type = \"poi\" AND posts.post_status = \"publish\") GROUP BY posts.ID '); PREPARE stmt FROM @sql; EXECUTE stmt;"; $query = mysqli_query($connection, $query_expression); var_dump(mysqli_error($connection)); var_dump($query);
Любой намек?
Заранее спасибо…
Это не запрос, а набор запросов.
Разделите его на отдельные заявления и запустите их один за другим
mysqli_query($connection, "SET SESSION group_concat_max_len = 1000000"); mysqli_query($connection, "SET @sql = NULL"); $query_expression = "SELECT..."; $query = mysqli_query($connection, $query_expression);