Requête croisée en PHP et MYSQL
P粉714890053
P粉714890053 2024-04-02 22:34:20
0
1
610

Je cherchais un moyen d'implémenter une requête croisée dans MySQL et j'ai trouvé la réponse dans ce post : Afficher les dates en lignes sous forme de colonnes dynamiques dans MySQL. J'ai essayé la requête et je l'ai fait fonctionner, mais comment écrire la requête en PHP en utilisant le style procédural MySQL. Voici la requête :

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

Si j'imprime le SQL généré et que je le colle dans PHPMyAdmin, la requête s'exécute correctement mais donne une erreur de syntaxe SQL sur php "Erreur fatale : mysqli_sql_exception non interceptée : il y a une erreur dans votre syntaxe SQL ; consultez le manuel approprié pour la version de votre serveur MariaDB. pour obtenir la syntaxe correcte à utiliser autour de 'SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(week_start =...' at line 2 in.."). Existe-t-il un moyen d'écrire la requête en php ? < /p>

P粉714890053
P粉714890053

répondre à tous(1)
P粉087951442

Et ça ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal