Группировка и сортировка различными способами в mySQL - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть таблица, содержащая некоторую информацию о метасах (я думаю, Wordpress делает это), например:

| id  | name | value       | 
| 002 | meta1  | string1-1 |
| 003 | meta1  | string1-2 | 
| 004 | meta2  | ipaddress1 |
| 005 | meta2  | ipaddress2 | 
| 006 | meta2  | ipaddress3 | 
| 007 | meta3  | numerical3-1 |

Как видите, meta1 содержит строковые значения, meta2 содержит IP-адреса, meta3 содержит числовые значения. Моя проблема при запросе этой таблицы состоит в том, чтобы упорядочить все сначала по имени, а затем по значению.

Не было бы проблем, если бы все значения были строками, но у меня есть разные типы значений для разных метаданных, например, это требует использования функции INET_ATON () mySQL для правильной сортировки meta2.

Мой пример касается строк и IP-адресов в качестве примера, но мой вопрос общий, я мог бы хотеть отсортировать другую мету в порядке DES C вместо порядка AS C, et c ...

У меня есть все мои мета в массиве, и я уже думал об обновлении этого до ассоциативного массива, подобного этому, в PHP:

    $metas = [
        ['mid' => 'meta1', 'cri' => ''], //string
        ['mid' => 'meta2', 'cri' => 'INET_ATON'], //ip
        ['mid' => 'meta3', 'cri' => ''], //string
    ];

Так что я могу где-то хранить, какие критерии я хочу использовать для каждой меты, пустой 'cri' является критерием сортировки по умолчанию. Я могу добавить другую информацию, например 'ord', со значениями 'AS C' или 'DES C' ...

. Мой вопрос касается синтаксиса запроса для достижения этой цели, указав спецификацию c метод упорядочения для указанного c имени, например, но все упорядочено с использованием INET_ATON ().

SELECT * FROM mytable GROUP BY name ORDER BY INET_ATON(value)

Если у кого-то есть указатель, идея ... спасибо. (Я также пытался использовать javascript для визуальной сортировки результата, и есть некоторые идеи с таблицей TinySort и т. Д. c ... но кажется, что сортированный результат из SQL .. выглядит чище). Спасибо. Пьер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...