【问题标题】:mysql query different meta_key and display them separatelymysql查询不同的meta_key并分别显示
【发布时间】:2014-07-19 00:42:11
【问题描述】:

我是 mysql 的新手,我的问题很难描述。 Wordpress 将许多 postmeta 存储为包含各种 meta_values 的各种 meta_keys。我在尝试通过特定的 meta_key 查询但随后能够显示 2 个不同的 meta_keys 及其值时遇到问题。这是我到目前为止正确显示特定 wordpress 类别的所有视频网址的内容...

<?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_key 和它的值,像这样......

   <?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_values 都绑定到同一个帖子。每个帖子可能在“meta_key”列中有几个元键,然后这些键有单独的元值。因此,我希望显示其中两个 meta_keys 及其值都来自同一个帖子 ID。有任何想法吗?感谢您的帮助!

标签: mysql wordpress foreach


【解决方案1】:

您可以为此使用 wp_query。它是用于帖子的 wordpress 数据库查询,这使得处理 post_meta 时变得更容易。

http://codex.wordpress.org/Class_Reference/WP_Query

以上举例

$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_dumps)

或者如果你想坚持使用 mysql 为每一行使用一个 foreach 循环并将 id 传递给 get_post_meta($id);然后,您可以对每一行使用 postmeta。

【讨论】:

  • 感谢您的回复。 get_post_meta 是有道理的。但非常抱歉,我没有提到我正在使用 mysql_query 因为它实际上是一个不是 wordpress 站点的页面,但它正在从使用 wordpress 的数据库中提取数据......非常令人困惑。很抱歉!
  • 我确实通过删除查询中的特定元键来解决我的问题,这样多个元键及其元值都将成为查询的一部分。然后我可以使用 if 语句来填充我需要的字段。由于我的版本看起来很乱,我会为更多的 cmets 发布我的答案。
【解决方案2】:

我找到了一个解决方案,虽然可行,但我认为有更好的方法来做到这一点。我删除了查询中的特定 meta_key 项,以便我可以获取所有 meta_key,然后在 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 
    } 
  }
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多