Php 如何根据查询中字段的相对位置对表中的列进行排序?
我有一个表,它以这种格式存储与帖子相关的数据 描述可湿性粉剂(wp_)的使用时间Php 如何根据查询中字段的相对位置对表中的列进行排序?,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我有一个表,它以这种格式存储与帖子相关的数据 描述可湿性粉剂(wp_)的使用时间 +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+------
+------------+---------------------+------+-----+---------+----------------+
| 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_键
,这正是我想要的。谢谢。我还添加了检查安全输入参数的代码。:)