如何用cte使php handel mander my qu as quot as' sql?

发布于 2025-01-27 03:50:44 字数 2160 浏览 4 评论 0原文

我将SQL查询添加到PHP代码中,但它选择回声“ 0结果”。 我在Sublime文本编辑器中注意到所有SQL代码都以相同的颜色显示(不正确),但是当我删除第一个单词“ with cte as(”('功能失败。 简而言之,如何使PHP处理我的SQL?谢谢。

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}


$sql = " 
    WITH CTE as  (  SELECT *
       , LEAD(total_weight, 1) OVER(
           ORDER BY weight_date DESC
       ) AS prev_total_weight
       
       , MIN(total_weight) OVER() AS lowest_weight
       , MAX(total_weight) OVER() AS highest_weight
       , FROM_UNIXTIME(weight_date, '%u') AS weight_week
           
             
           , ROW_NUMBER() OVER(
              ORDER BY weight_date DESC
           ) AS RowNum
           

   FROM   (
              SELECT *, weight_start_week + weight_end_week AS total_weight
              FROM YourTable
           ) t
        
          
)
SELECT
    `_ID`, `weight_date`, `weight_start_week`, `weight_end_week`
     weight_end_week 
    ,total_weight
    ,prev_total_weight
    ,lowest_weight
    ,highest_weight
    ,weight_week
    
    
    ,CASE
             WHEN total_weight > prev_total_weight THEN 'greater'
             WHEN total_weight = prev_total_weight THEN 'equal'
             ELSE 'less'
             END AS comparison
   ,RowNum
FROM CTE

";
$result = $conn->query($sql);

if ($result->num_rows > 0) {


  while($row = $result->fetch_assoc()) {
    echo "<table><tbody><tr><td>Latest:</td><td>" . $row["total_weight"]. "</td><td>Percent</td><td>up/down</td></td></tr><tr><td>Lowest:</td><td>" . $row["lowest_weight"].  "</td><td>" . $row["weight_week"]. "</td><td>Date:</td></tr><tr><td>Most:</td><td>" . $row["highest_weight"]. "</td><td>"  . $row["weight_week"]. "</td><td>Date:</td></tr></tbody></table>";

  }
} else {
  echo "0 results";
}
$conn->close();
?>

I added my SQL query into the PHP code, but it choose to echo "0 results".
I notice in Sublime Text editor that all the sql code shows in same color (not right), but when I remove the first words "WITH CTE as (" it becomes multi-color in Sublime Text - but the functions fails.
In short, how do I make PHP handle my SQL? Thanks.

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}


$sql = " 
    WITH CTE as  (  SELECT *
       , LEAD(total_weight, 1) OVER(
           ORDER BY weight_date DESC
       ) AS prev_total_weight
       
       , MIN(total_weight) OVER() AS lowest_weight
       , MAX(total_weight) OVER() AS highest_weight
       , FROM_UNIXTIME(weight_date, '%u') AS weight_week
           
             
           , ROW_NUMBER() OVER(
              ORDER BY weight_date DESC
           ) AS RowNum
           

   FROM   (
              SELECT *, weight_start_week + weight_end_week AS total_weight
              FROM YourTable
           ) t
        
          
)
SELECT
    `_ID`, `weight_date`, `weight_start_week`, `weight_end_week`
     weight_end_week 
    ,total_weight
    ,prev_total_weight
    ,lowest_weight
    ,highest_weight
    ,weight_week
    
    
    ,CASE
             WHEN total_weight > prev_total_weight THEN 'greater'
             WHEN total_weight = prev_total_weight THEN 'equal'
             ELSE 'less'
             END AS comparison
   ,RowNum
FROM CTE

";
$result = $conn->query($sql);

if ($result->num_rows > 0) {


  while($row = $result->fetch_assoc()) {
    echo "<table><tbody><tr><td>Latest:</td><td>" . $row["total_weight"]. "</td><td>Percent</td><td>up/down</td></td></tr><tr><td>Lowest:</td><td>" . $row["lowest_weight"].  "</td><td>" . $row["weight_week"]. "</td><td>Date:</td></tr><tr><td>Most:</td><td>" . $row["highest_weight"]. "</td><td>"  . $row["weight_week"]. "</td><td>Date:</td></tr></tbody></table>";

  }
} else {
  echo "0 results";
}
$conn->close();
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

┾廆蒐ゝ 2025-02-03 03:50:45

您可以将CTE插入主要查询,并将其用作子查询:

SELECT `_ID`, `weight_date`, `weight_start_week`, `weight_end_week`
       total_weight, prev_total_weight, lowest_weight, highest_weight,
       weight_week,
       CASE ...
FROM
(
    -- place CTE definition here
    SELECT *, ...
           ROW_NUMBER() OVER( ORDER BY weight_date DESC) AS RowNum
    FROM ...
) t;

You may inline the CTE into the main query, and use it as a subquery:

SELECT `_ID`, `weight_date`, `weight_start_week`, `weight_end_week`
       total_weight, prev_total_weight, lowest_weight, highest_weight,
       weight_week,
       CASE ...
FROM
(
    -- place CTE definition here
    SELECT *, ...
           ROW_NUMBER() OVER( ORDER BY weight_date DESC) AS RowNum
    FROM ...
) t;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文