我有一个包含某种元数据信息的表(我认为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包含数字值。查询此表时,我的问题是首先按名称然后按值排序。
如果所有值都是字符串,但对于不同的meta具有不同类型的值,这将不是问题,例如,这需要使用INET_ATON()mySQL函数对meta2进行正确排序。
我的示例是关于字符串与IP地址的示例,但我的问题很笼统,我可能想按DESC顺序而不是ASC顺序对另一个元数据进行排序,等等...
我将所有元数据都放在一个数组中,并且我已经考虑过将其升级为PHP中的关联数组:
$metas = [
['mid' => 'meta1', 'cri' => ''], //string
['mid' => 'meta2', 'cri' => 'INET_ATON'], //ip
['mid' => 'meta3', 'cri' => ''], //string
];
因此,我可以将每个元数据要使用的条件存储在某个地方,空的“ cri”是默认的排序条件。我很高兴地添加了另一个信息,例如“ ord”,其值为“ ASC”或“ DESC” ...
我的问题是关于查询的语法,以实现此目的,为特定名称指定特定的排序方法,像这样,但是所有内容都使用INET_ATON()进行排序。
SELECT * FROM mytable GROUP BY name ORDER BY INET_ATON(value)
如果有人有一个指针,一个主意...谢谢。 (我也尝试使用javascript对结果进行视觉排序,并且有一些关于tablesorter,TinySort等的想法,但是从SQL中获得排序结果似乎更干净。) 谢谢。皮埃尔。