php - mySql @变量在不同客户端的行为有所不同

标签 php mysql sql variables

我有这个查询:

SELECT @ROWNUM := CASE WHEN @PREV_CAT_ID=T1.category_id THEN @ROWNUM+1 ELSE 1 END AS RANK, 
  @PREV_CAT_ID:=T1.category_id, 
  T1.* 
  FROM(d.category_id
      FROM some_table d,
      (SELECT @ROWNUM := 0)R 
      ORDER BY d.category_id
  }T1 

我希望对于具有相同category_id 的记录,此 RANK 列会递增。当category_id增加时,我希望排名重置为1并再次开始递增。

当我从 TOAD 执行查询时,这非常有效,但当在我的 Web 应用程序中或从 phpMyAdmin 执行时,无论我做什么,RANK 始终为 1。

有人知道问题可能是什么吗?

谢谢!

最佳答案

您应该每次重置所有变量(@ROWNUM@PREV_CAT_ID)。尝试这个查询 -

SELECT
  category_id, rank
FROM (
  SELECT 
    category_id
    , IF(@category_id = category_id, @num := @num + 1, @num := 1) AS rank
    , @category_id := category_id
  FROM some_table
  CROSS JOIN (SELECT @num := 0, @category_id:= NULL) reset_all_vars
  ORDER BY category_id
) t;

关于php - mySql @变量在不同客户端的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7674053/

相关文章:

php - 如何也将列设置为 Upper 并删除集合 laravel 中的符号 _

php - 如何在php中将1,2,3转换为 '1' ,'2' ,'3'

mysql - 如何在子查询中使用第一个查询的结果

sql - 将 CASE WHEN 与多个 When 一起使用只会产生 BOOLEAN 值

php - 在 Forge 上安装 Laravel 5.2 时出错

php - PHP/jQuery 中的通知系统

mysql - 合并两个结果集

php - 操纵数据库中的条目在我的网页上显示方式的最佳方式是什么?

mysql - 创建表时出现SQL错误

c# - 使用 SQL Server 数据库文件