Kreuztabellenabfrage in PHP und MYSQL
P粉714890053
P粉714890053 2024-04-02 22:34:20
0
1
612

Ich suchte nach einer Möglichkeit, eine Kreuztabellenabfrage in MySQL zu implementieren und fand die Antwort in diesem Beitrag: Datumsangaben in Zeilen als dynamische Spalten in MySQL anzeigen. Ich habe die Abfrage ausprobiert und zum Laufen gebracht, aber wie schreibe ich die Abfrage in PHP im prozeduralen MySQL-Stil? Hier ist die Abfrage:

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

Wenn ich das generierte SQL ausdrucke und in PHPMyAdmin einfüge, wird die Abfrage einwandfrei ausgeführt, gibt aber einen SQL-Syntaxfehler auf PHP aus: „Schwerwiegender Fehler: Nicht erfasste mysqli_sql_Exception: Es liegt ein Fehler in Ihrer SQL-Syntax vor. Überprüfen Sie das entsprechende Handbuch zu Ihrer MariaDB-Serverversion um die richtige Syntax für die Verwendung in der Umgebung von 'SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(week_start =...' at line 2 in..')' zu erhalten. Gibt es eine Möglichkeit, die Abfrage in PHP zu schreiben? < /p>

P粉714890053
P粉714890053

Antworte allen(1)
P粉087951442

这个怎么样?

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage