यदि आप किसी संघ के परिणामों से पंक्तियों को वैकल्पिक करना चाहते हैं, तो आपको उनमें से प्रत्येक को एक रैंक देना होगा जो दो से बढ़ जाए - एक ऑड्स के लिए, एक ईवन के लिए।
select @rank := @rank + 2 `rank`, *
from table1, (select @rank := -1) q
where column1 = 'anything'
union all
select @rank2 := @rank2 + 2 `rank`, *
from table2, (select @rank2 := 0) q
where column1 = 'anything'
order by rank asc;
sqlfiddle नीचे दिखता है और मैं एक डेमो बनाउंगा, लेकिन इसे काम करना चाहिए।
@rank
और @rank2
चर हैं। @rank2 := @rank2 + 2
वेतन वृद्धि @rank
द्वारा 2
परिणाम सेट में प्रत्येक पंक्ति के लिए, और परिणामों में नया मान शामिल करता है।from table2, (select @rank2 := 0) q
वैरिएबल को 0
. में इनिशियलाइज़ करने के लिए बाध्य करने का एक तरीका है अतिरिक्त प्रश्नों को चलाने के बिना। -1
. पर रैंक काउंटर शुरू करके पहली क्वेरी के लिए, और -0
दूसरी क्वेरी के लिए, पहली क्वेरी की प्रत्येक पंक्ति को 1,3,5,7,...
क्रम में एक रैंक प्राप्त होती है , और दूसरी क्वेरी की प्रत्येक पंक्ति को 2,4,6,8,...
क्रम में एक रैंक प्राप्त होती है
उदाहरण
mysql> create table table1 (id integer primary key auto_increment, column1 varchar(25));
Query OK, 0 rows affected (0.08 sec)
mysql> create table table2 (id integer primary key auto_increment, column1 varchar(25));
Query OK, 0 rows affected (0.08 sec)
mysql> insert into table1 (column1) values ('abcd'), ('lmno'), ('abcd'), ('lmno'), ('pqr');
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> insert into table2 (column1) values ('lmno'), ('abcd'), ('abcd'), ('lmno'), ('abcd'), ('abcd'), ('abcd');
Query OK, 7 rows affected (0.05 sec)
Records: 7 Duplicates: 0 Warnings: 0
और डेटा:
mysql> select * from table1;
+----+---------+
| id | column1 |
+----+---------+
| 1 | abcd |
| 2 | lmno |
| 3 | abcd |
| 4 | lmno |
| 5 | pqr |
+----+---------+
5 rows in set (0.00 sec)
mysql> select * from table2;
+----+---------+
| id | column1 |
+----+---------+
| 1 | lmno |
| 2 | abcd |
| 3 | abcd |
| 4 | lmno |
| 5 | abcd |
| 6 | abcd |
| 7 | abcd |
+----+---------+
7 rows in set (0.00 sec)
और परिणाम:
mysql> select @rank := @rank + 2 `rank`, id from table1, (select @rank := -1) q where column1 = 'abcd' union select @rank2 := @rank2 + 2 `rank`, id from table2, (select @rank2 := 0) q where column1 = 'abcd' order by rank asc;
+------+----+
| rank | id |
+------+----+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 3 |
| 6 | 5 |
| 8 | 6 |
| 10 | 7 |
+------+----+
7 rows in set (0.00 sec)