Php 如何根据查询中字段的相对位置对表中的列进行排序?

Php 如何根据查询中字段的相对位置对表中的列进行排序?,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我有一个表,它以这种格式存储与帖子相关的数据 描述可湿性粉剂(wp_)的使用时间 +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+------

我有一个表,它以这种格式存储与帖子相关的数据

描述可湿性粉剂(wp_)的使用时间

+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| meta_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| post_id    | bigint(20) unsigned | NO   | MUL | 0       |                |
| meta_key   | varchar(255)        | YES  | MUL | NULL    |                |
| meta_value | longtext            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
meta_键有一个类似于
'author'、'extract'、'download'
的键。元值具有相应的值

现在,我正在编写一个基于post_id查询数据库的php脚本。因此,我需要按照指定的顺序显示上表中的所有元数据。查询是:

    $select_post_meta="select meta_value from wp_postmeta where post_id='".$postid."' and (meta_key='author' or meta_key='category' or meta_key = 'excerpt')";

$meta_paper = mysql_query($select_post_meta);

    while(($meta_values = mysql_fetch_array($meta_paper))
            {   echo "<i>'".$meta_values['meta_value']."'</i><br/>";  }
$select_post_meta=“从wp_postmeta中选择meta_值,其中post_id=”、“$postid.”和(meta_key='author'或meta_key='category'或meta_key='摘录');
$meta\u paper=mysql\u query($select\u post\u meta);
而($meta_values=mysql_fetch_数组($meta_paper))
{echo“'”$meta_value['meta_value']。“'
“;}
如果元数据的显示顺序与我查询的顺序相同,但它们被定位为第一个描述、类别和作者,那就太好了。是否有其他方法可以查询数据库,以便我可以按照第一个作者、类别和描述的顺序获得值。谢谢你添加

ORDER BY meta_key
到您的查询文本。如下所示:

$select_post_meta="select meta_value from wp_postmeta where post_id='".$postid."'
and (meta_key='author' or meta_key='category' or meta_key = 'excerpt')
ORDER BY meta_key";

我强烈建议您通过避免在SQL文本中包含“不安全”字符串来阻止SQL注入,例如:

$select_post_meta = sprintf("select meta_value from wp_postmeta 
where post_id='%s'
and (meta_key='author' or meta_key='category' or meta_key = 'excerpt')
ORDER BY meta_key", mysql_real_escape_string($postid));

碰巧您按字母顺序列出了搜索词,这使得表达式的顺序非常简单

如果需要以其他顺序排列,可以使用不同的表达式

ORDER BY CASE meta_key WHEN 'Author' THEN 1 WHEN 'Category' THEN 2 WHEN 'Excerpt' THEN 3 END
我们还注意到,您的查询可能会为每个键返回任意数量的值(假设我们没有看到对(post_id,meta_key)的唯一约束)

查询可能返回零,一个或多个Author、Category和extract值,而您无法知道哪个是哪个


我的倾向是在结果集中也包括meta_键。然后我的代码将能够判断特定的
meta_值
是针对特定的
meta_键

,这正是我想要的。谢谢。我还添加了检查安全输入参数的代码。:)