Maison  >  Questions et réponses  >  le corps du texte

Requête croisée en PHP et MYSQL

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粉714890053P粉714890053172 Il y a quelques jours395

répondre à tous(1)je répondrai

  • P粉087951442

    P粉0879514422024-04-03 15:03:05

    Et ça ?

    répondre
    0
  • Annulerrépondre