[英]How to Show parent_id of Parent_id until parent_id is 0 in mysql
[英]How Select Random with parent_id in mysql?
我有這樣的桌子......
╔═════╦════════╦═════════════╗
║ id ║ text ║ parent_id ║
╠═════╬════════╬═════════════╣
║ 1 ║ test ║ 1 ║
║ 2 ║ asd ║ 1 ║
║ 3 ║ dsa ║ 1 ║
║ 4 ║ fgh ║ 4 ║
║ 5 ║ jkl ║ 4 ║
║ 6 ║ kkk ║ 4 ║
║ 7 ║ asas ║ 7 ║
╚═════╩════════╩═════════════╝
如何獲得隨機輸出:
╔═════╦════════╦═════════════╗
║ id ║ text ║ parent_id ║
╠═════╬════════╬═════════════╣
║ 4 ║ fgh ║ 4 ║
║ 5 ║ jkl ║ 4 ║
║ 6 ║ kkk ║ 4 ║
║ 7 ║ asas ║ 7 ║
║ 1 ║ test ║ 1 ║
║ 2 ║ asd ║ 1 ║
║ 3 ║ dsa ║ 1 ║
╚═════╩════════╩═════════════╝
要么
╔═════╦════════╦═════════════╗
║ id ║ text ║ parent_id ║
╠═════╬════════╬═════════════╣
║ 7 ║ asas ║ 7 ║
║ 4 ║ fgh ║ 4 ║
║ 5 ║ jkl ║ 4 ║
║ 6 ║ kkk ║ 4 ║
║ 1 ║ test ║ 1 ║
║ 2 ║ asd ║ 1 ║
║ 3 ║ dsa ║ 1 ║
╚═════╩════════╩═════════════╝
等等....
SELECT *
FROM Table1
ORDER BY parent_id * rand()
稍微更新基於@sagi的ans,附加組的行順序保證。
這是演示。
-- data
create table tbl(id int, text char(20), parent_id int);
insert into tbl values
(1 , 'test', 1 ),
(2 , 'asd', 1 ),
(3 , 'dsa', 1 ),
(4 , 'fgh', 4 ),
(5 , 'jkl', 4 ),
(6 , 'kkk', 4 ),
(7 , 'asas', 7 );
select * from tbl;
select t.*
from tbl t inner join
(select parent_id, rand() rand_val from tbl group by parent_id) r
USING(parent_id)
order by rand_val, id;
mysql> select t.* from tbl t inner join (select parent_id, rand() rand_val from tbl group by parent_id) r USING(parent_id) order by rand_val, id;
+------+------+-----------+
| id | text | parent_id |
+------+------+-----------+
| 7 | asas | 7 |
| 4 | fgh | 4 |
| 5 | jkl | 4 |
| 6 | kkk | 4 |
| 1 | test | 1 |
| 2 | asd | 1 |
| 3 | dsa | 1 |
+------+------+-----------+
7 rows in set (0.00 sec)
mysql> select t.* from tbl t inner join (select parent_id, rand() rand_val from tbl group by parent_id) r USING(parent_id) order by rand_val, id;
+------+------+-----------+
| id | text | parent_id |
+------+------+-----------+
| 4 | fgh | 4 |
| 5 | jkl | 4 |
| 6 | kkk | 4 |
| 1 | test | 1 |
| 2 | asd | 1 |
| 3 | dsa | 1 |
| 7 | asas | 7 |
+------+------+-----------+
7 rows in set (0.00 sec)
你可以使用子查詢來完成它,類似於Juan解決方案:
SELECT s.* FROM YourTable s
INNER JOIN (select parent_id,max(rand()) as randVal FROM YourTable GROUP BY parent_id) t
ON(s.parent_id = t.parent_id)
ORDER BY t.randVal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.