我有table:
流:
+----+-------------------+------------+
| id | channel | bouquet |
+----+-------------------+------------+
| 1 | USA_CH 1 | ["1","28"] |
| 2 | USA_CH 2 | ["1","28"] |
| 11 | USA_CH 3 | ["1"] |
| 12 | USA_CH 4 | ["28"] |
+----+-------------------+------------+
频道:
+----+--------------------------+---------+----------+
| id | sort | bouquet | reseller |
+----+--------------------------+---------+----------+
| 1 | ["m1","1","2","m2","11"] | ["1"] | 0 |
| 27 | ["1","2"] | ["28"] | 0 |
| 39 | [] | ["33"] | 0 |
+----+--------------------------+---------+----------+
标记:
+----+--------+-------+---------+----------+
| id | marker | title | bouquet | reseller |
+----+--------+-------+---------+----------+
| 1 | m1 | MEGA | 1 | 1 |
+----+--------+-------+---------+----------+
| 2 | m2 | XTRA | 1 | 1 |
+----+--------+-------+---------+----------+
并且需要从通道表排序字段获取带有标记的通道顺序:
["m1","1","2","m2","11"]
所以我需要得到这样的输出:
+----+-------------------+
| id | channel |
+----+-------------------+
| 1 | MEGA |
| 1 | USA_CH 1 |
| 2 | USA_CH 2 |
| 2 | XTRA |
| 11 | USA_CH 3 |
+----+-------------------+
我尝试使用union sql:
SELECT s.id, s.channel, m.title FROM streams s, markers m, channels c WHERE JSON_SEARCH(s.bouquet, 'one', '1') IS NOT NULL AND
JSON_SEARCH(c.bouquet, 'one', '1') IS NOT NULL AND JSON_SEARCH(c.sort, 'one', s.id) IS NOT NULL
UNION
SELECT s.id, s.channel, m.title FROM streams s, markers m, channels c WHERE JSON_SEARCH(c.sort, 'one', m.marker) IS NOT NULL AND
JSON_SEARCH(s.bouquet, 'one', '1') IS NOT NULL;
我明白了:
+----+----------+-------+
| id | channel | title |
+----+----------+-------+
| 1 | USA_CH 1 | MEGA |
| 2 | USA_CH 2 | MEGA |
| 11 | USA_CH 3 | XTRA |
+----+----------+-------+
我需要得到这个:
+----+-------------------+
| id | channel |
+----+-------------------+
| 1 | MEGA |
| 1 | USA_CH 1 |
| 2 | USA_CH 2 |
| 2 | XTRA |
| 11 | USA_CH 3 |
+----+-------------------+
我做错了什么?我在mysql手册上读到union是用来把两个表的值合并成一个…所以我想我会得到我需要的这个结果,但正如你在我的示例代码中看到的,我总是从每个表中得到每一行的值..并且需要是对应于channels.sort json value的值之后的值…我正在html5中构建channel ediotor,所以我需要按channels.sort中的定义排列频道和读取频道名称和标记。
1条答案
按热度按时间k5hmc34c1#
我终于做到了!YUPIIII……)
我得到了很好的结果:
感谢大家评论上面的例子,我在union中的单个查询是错误的..使用detail try and error我终于得到了它..所以如果有人需要代码,这里就是它了