У меня есть следующая таблица:
+----+-----------------------------------------+----------+
| id | sort | channel |
+----+-----------------------------------------+----------+
| m2 | ["m2","1","2","11","m4","m3","m5","m1"] | E |
| 2 | ["m2","1","2","11","m4","m3","m5","m1"] | H2 |
| 1 | ["m2","1","2","11","m4","m3","m5","m1"] | H1 |
| 11 | ["m2","1","2","11","m4","m3","m5","m1"] | H3 |
| m4 | ["m2","1","2","11","m4","m3","m5","m1"] | S1 |
| m3 | ["m2","1","2","11","m4","m3","m5","m1"] | C3 |
| m5 | ["m2","1","2","11","m4","m3","m5","m1"] | M4 |
| m1 | ["m2","1","2","11","m4","m3","m5","m1"] | G6 |
+----+-----------------------------------------+----------+
Использование MySQL-запроса:
SELECT id, sort, channel FROM (SELECT s.id, c.sort, s.channel 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 UNION SELECT m.marker, c.sort, m.channel FROM markers m, channels c, streams s 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) ch ORDER BY LOCATE(id, CONCAT("'", sort, "'"));
Я получил приведенный выше результат таблицы, и мне нужно отсортировать идентификатор, используя поле сортировки... поэтому вывод должен быть:
| id |
------
m2
1
2
11
m4
m3
m5
m1
Я думаю, что проблема в следующем: ORDER BY LOCATE(id, CONCAT("'", sort, "'")) но я пытаюсь изменить запрос без желаемого результата... что мне нужно сделать, чтобы получить более правильный результат?
пример (отпишитесь от меня) генератора чисел SQL для анализа массива JSON, о котором я говорил. Я считаю, что мой пример может быть помечен как дубликат для этого вопроса, потому что он также использует массив JSON.
Спасибо, что указали мне на MySQL8, но есть ли у вас пример сайта, как это делается в этой новой версии, прежде чем я обновлюсь... и есть ли какие-либо улучшения производительности в MySQL8?






Использовать этот:
ORDER BY LOCATE(CONCAT('"', id, '"'), sort)
значения содержат двойные кавычки, поэтому конкатенация должна заключать их в двойные кавычки, а не в одинарные кавычки.
См. упрощенный демо.
Спасибо ... это работает как шарм ... я трачу несколько часов, чтобы получить этот вывод, но я никогда не доберусь до этого простого заказа ... еще раз спасибо ... вы сэкономили мне время :)
я бы предложил перейти на MySQL 8 (если возможно) из-за JSON_TABLE(), что делает это намного проще. Это должно быть возможно и в более старой версии, но вам нужно проявить творческий подход с генератором чисел SQL для динамического анализа JSON-массив.