1,将查询出来的数据重新编号
SELECT
@row_number:=@row_number + 1 AS row_number,
t.column1,
t.column2,
...
FROM
(SELECT @row_number:=0) AS x,
table_name AS t
ORDER BY
t.column1;
在上面的查询中,我们首先使用子查询 (SELECT @row_number:=0) AS x 初始化 @row_number 变量,并将其设置为 0。然后,我们在主查询中使用 @row_number:=@row_number + 1 表达式为每一行分配一个唯一的连续编号,并将其作为新的 row_number 列返回。最后,我们使用 ORDER BY 子句对结果进行排序。
2,通过一个字段是否包含某个值来使查询结果具备不同值
select
CASE
WHEN number LIKE '%point' THEN 1
WHEN number LIKE '%odd' THEN 2
WHEN number LIKE '%even' THEN 2
WHEN number LIKE '%small' THEN 3
WHEN number LIKE '%big' THEN 3
else 0
end as type
from orders
类似于很多编程语言,sql查询中也可以使用case when语句进行查询,使用频率比较少,导致平时很容易忽略这个用法,在这段代码中我使用case when语句来使得当number字段以不同的字符串结尾时查得出询不同的结果。
3,MySql查询时区
SELECT @@global.time_zone;
SHOW VARIABLES LIKE '%time_zone%';
2、递归
有一张代理表agent,id代表代理id,agent_id代表代理的上级,agent_id=0代表总代理,那么怎么查询总代理下所有代理的投注记录
WITH RECURSIVE agent_hierarchy AS (
SELECT id
FROM agent
WHERE agent_id = 0
UNION ALL
SELECT a.id
FROM agent a
INNER JOIN agent_hierarchy ah ON a.agent_id = ah.id
)
SELECT hb.*
FROM hall_bet hb
WHERE hb.agent_id IN (SELECT id FROM agent_hierarchy);