mysql查询不同的meta_键并分别显示
我是mysql的新手,我的问题很难描述。Wordpress将大量Posteta存储为包含各种meta_值的各种meta_键。我在试图通过一个特定的meta_键进行查询时遇到了一个问题,但随后却无法显示两个不同的meta_键及其值。这里是我到目前为止,正确显示从一个特定的wordpress类别的所有视频URLmysql查询不同的meta_键并分别显示,mysql,wordpress,foreach,Mysql,Wordpress,Foreach,我是mysql的新手,我的问题很难描述。Wordpress将大量Posteta存储为包含各种meta_值的各种meta_键。我在试图通过一个特定的meta_键进行查询时遇到了一个问题,但随后却无法显示两个不同的meta_键及其值。这里是我到目前为止,正确显示从一个特定的wordpress类别的所有视频URL <?php $myquery=mysql_query(" SELECT * FROM foy_postmeta AS pm INNER JOIN foy_term_relationsh
<?php
$myquery=mysql_query("
SELECT * FROM foy_postmeta AS pm
INNER JOIN foy_term_relationships AS tr ON (pm.post_id = tr.object_id)
INNER JOIN foy_posts AS p ON (pm.post_id = p.ID)
WHERE pm.meta_key='video_url'
AND tr.term_taxonomy_id='27'
AND p.post_status='publish'
ORDER BY p.post_date DESC
");
$rows = array();
while($row=mysql_fetch_array($myquery)){
$rows[] = $row;
}
?>
然后我把它放进html中的行中,它正确地显示了所有的视频标题和它们的路径
<?php
foreach( $rows as $row ) {
<div>my video title: <?php echo $row["post_title"]; ?></div>
<div>my video url: <?php echo $row["meta_value"]; ?></div>
}
?>
现在,我想做的是保持这个行列表不变,但还要写出另一个meta_键和它的值,类似这样的东西
<?php
foreach( $rows as $row ) {
<div>my video title: <?php echo $row["post_title"]; ?></div>
<div>my video url: <?php echo $row["meta_value"]; ?></div>
<div>my video format is: <?php echo $row["meta_value"]; ?></div>
}
?>
但我不确定如何在同一个循环中显示2个meta_值,因为它们在同一个postETA表中有单独的meta_键。您可以使用wp_查询进行此操作。这是wordpress数据库对帖子的查询,这使得处理帖子时更加容易 例如上述
$args = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'video_url',
)
),
'tax_query' => array(
array(
'taxonomy' => 'your taxonomy name here',
'field' => 'slug',
'terms' => 'whatever'
)
),
'orderby' => 'date',
'order' => 'DESC',
);
$query= new wp_query($args);
?>
while ( $query->have_posts() ) : $query->the_post();
$meta = get_post_meta( $post->ID );
var_dump($meta);
?>
<h2><?php the_title(); ?></h2>
<?php endwhile; ?>
现在,对于每一篇文章,您都可以访问post_meta检查数组var_为键转储了什么
或者,如果您想持久化mysql,请对每一行使用foreach循环,并将id传递给get_post_meta$id;然后,您可以对每一行使用posmeta 我找到了一个虽然有效的解决方案,但我认为还有更好的方法。我删除了查询中的特定meta_键项,以便获取所有meta_键,然后在foreach循环中使用if语句创建我想要显示的特定变量:
<?php
$myquery=mysql_query("
SELECT * FROM foy_postmeta AS pm
INNER JOIN foy_term_relationships AS tr ON (pm.post_id = tr.object_id)
INNER JOIN foy_posts AS p ON (pm.post_id = p.ID)
WHERE tr.term_taxonomy_id='27'
AND p.post_status='publish'
ORDER BY p.post_date DESC
");
$rows = array();
while($row=mysql_fetch_array($myquery)){
$rows[] = $row;
}
<?php
foreach( $rows as $row ) {
// sets video url and video layout values as variables
if ($row["meta_key"] == "video_url" ){ $videourl = $row["meta_value"]; }
if ($row["meta_key"] == "video_layout" ){ $videolayout = $row["meta_value"]; }
if ($row["meta_key"] == "video_url" ){
?>
<div>my video url: <?php echo $videourl ?></div>
<div>my video format is: <?php echo $videolayout ?></div>
<?php
}
}
?>
元值是否与同一帖子相关?是的。所有meta_值都绑定到同一个post。每个帖子的meta_key列中可能有几个meta_键,然后这些meta_键有各自的meta_值。所以我想显示两个meta_键,它们的值都来自同一个post id。有什么想法吗?谢谢你的帮助!谢谢你的回复。get_post_元是有意义的。但非常抱歉,我没有提到我正在使用mysql_查询,因为它实际上是一个页面,不是wordpress站点,但它正在从使用wordpress的数据库中提取数据……非常混乱。对不起!我确实通过删除查询中的特定meta_键来解决问题,这样多个meta_键及其meta_值都将成为查询的一部分。然后我可以使用if语句填充我需要的字段。我会把我的答案贴出来,因为我的版本看起来很混乱。