У меня есть SQL, который возвращает это из MySQL:
SELECT id, channel, (y.count) AS channels
FROM (
SELECT s.id AS id, c.sort, s.channel
FROM channels c, streams s
LEFT JOIN logo l ON s.id=l.channel
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 m.marker, c.sort, m.channel
FROM markers m, channels c, streams s
LEFT JOIN logo l ON s.id=l.channel
WHERE JSON_SEARCH(m.bouquet, 'one', 1) IS NOT NULL
AND JSON_SEARCH(c.bouquet, 'one', 1) IS NOT NULL
AND JSON_SEARCH(c.sort, 'one', m.marker) IS NOT NULL
AND s.id=l.channel) ch
CROSS JOIN (
SELECT count
FROM (
SELECT COUNT(s.id RLIKE '^[0-9]+$') AS count
FROM streams s, 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) AS x) AS y
ORDER BY LOCATE(CONCAT('"', id, '"'), sort);
Возврат из этого запроса:
+----+-------------------+
| id | channel |
+----+-------------------+
| m2 | AA-AA |
| 1 | KR_A 1 |
| 2 | KR_A 2 |
| 11 | HR_A 3 |
| 12 | HR_B 1 |
| m4 | BB-BB |
| m3 | CC-CC |
| 17 | SR_B 1 |
| m5 | DD-DD |
| m1 | EE-EE |
+----+-------------------+
Мне нужно изменить SQL, когда я добавляю m2
в запросевернуть:
1
2
11
12
И если я добавлю m3
, мне нужно получить:
17
Поэтому я пытаюсь добавить это в начале SQL для фильтрации id:
SELECT IF (id BETWEEN 'm2' AND '%m', id, 0) As id, channel, (y.count) AS channels
и я получаю это:
+----+-------------------+----------+
| id | channel | channels |
+----+-------------------+----------+
| m2 | AA-AA | 5 |
| 0 | KR_A 1 | 5 |
| 0 | KR_A 2 | 5 |
| 0 | HR_A 3 | 5 |
| 0 | HR_B 1 | 5 |
| m4 | BB-BB | 5 |
| m3 | CC-CC | 5 |
| 0 | SR_B 1 | 5 |
| m5 | DD-DD | 5 |
| m1 | EE-EE | 5 |
+----+-------------------+----------+
И нужно получить это:
+----+-------------------+----------+
| id | channel | channels |
+----+-------------------+----------+
| 1 | KR_A 1 | 4 |
| 2 | KR_A 2 | 4 |
| 11 | HR_A 3 | 4 |
| 12 | HR_B 1 | 4 |
+----+-------------------+----------+
Я не знаю, как сделать в запросе SQL, который выбирает из 'm2'
до следующего 'm'
и исключить 'm2'
и 'm'
из результатов .... любая помощь?