Saya sedang mencari cara untuk melaksanakan pertanyaan tab silang dalam MySQL dan menemui jawapan daripada siaran ini: Paparkan tarikh dalam baris sebagai lajur dinamik dalam MySQL. Saya mencuba pertanyaan itu dan membuatnya berfungsi, tetapi bagaimana saya menulis pertanyaan dalam PHP menggunakan gaya prosedur MySQL. Berikut adalah pertanyaannya:
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(`week_start` = "', `week_start`,'", `weekly_value`,0)) AS "',DATE(`week_start`),'"') ) INTO @sql FROM (SELECT * FROM crosstab WHERE `week_start` BETWEEN NOW() - INTERVAL 4 WEEK AND NOW()) t1; SET @sql = CONCAT('SELECT s.`ID`, s.`name`, ', @sql, ' FROM (SELECT * FROM crosstab WHERE `week_start` BETWEEN NOW() - INTERVAL 4 WEEK AND NOW()) s GROUP BY s.`name` ORDER BY s.`ID`'); SELECT @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; $sql = "SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(`week_start` = \"', `week_start`,'\", `weekly_value`,0)) AS \"',DATE(`week_start`),'\"') ) INTO @sql FROM (SELECT * FROM crosstab WHERE `week_start` BETWEEN NOW() - INTERVAL 4 WEEK AND NOW()) t1; SET @sql = CONCAT('SELECT s.`ID`, s.`name`, ', @sql, ' FROM (SELECT * FROM crosstab WHERE `week_start` BETWEEN NOW() - INTERVAL 4 WEEK AND NOW()) s GROUP BY s.`name` ORDER BY s.`ID`'); SELECT @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;"; // echo $sql; // exit; $report_query = mysqli_query($conn, $sql);
Jika saya mencetak sql yang dijana dan menampalnya ke dalam PHPMyAdmin, pertanyaan akan dijalankan dengan baik tetapi memberikan ralat sintaks SQL pada php "Ralat maut: Uncaught mysqli_sql_exception: Terdapat ralat dalam sintaks SQL anda; semak manual yang sesuai untuk versi pelayan MariaDB anda untuk mendapatkan sintaks yang betul untuk digunakan sekitar 'SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(week_start
=...' at line 2 in..") . Adakah terdapat cara untuk menulis pertanyaan dalam php? < /p>
Bagaimana dengan ini?