【问题标题】:How to search two meta values from same single column and table如何从相同的单列和表中搜索两个元值
【发布时间】:2016-03-21 11:26:44
【问题描述】:

我在 WordPress 中进行自定义搜索。共有三个搜索字段。

  1. 年龄
  2. 位置
  3. 帖子标题

帖子标题是从wp_posts > post_title 字段搜索的,位置和年龄是自定义元字段y_age, y_activity_locations。所以有6种搜索场景。

如果用户输入:

  1. 输入标题或
  2. 选择位置或
  3. 选择年龄或
  4. 输入标题并选择位置或
  5. 输入标题并选择年龄或
  6. 选择位置并选择年龄

我的前 5(五)个场景运行良好,但我的第 6 个场景无法运行,因为它来自同一张表 (wp_postmeta) 和同一列,但有两个不同的值。

所以我尝试了这个查询:

Select y_posts.*, y_meta.*
From wp_posts As y_posts
Inner Join wp_postmeta As y_meta
On y_posts.ID = y_meta.post_id
Where y_posts.post_type = 'download'
And y_posts.post_status = 'publish'
And y_meta.meta_key = 'y_activity_locations' 
And y_meta.meta_value Like '%Armidale%'
And y_meta.meta_key = 'y_age'
And y_meta.meta_value Like '%3 to 5%'

查询不起作用,因为我认为服务器混淆了同一列中的两个值。

Select y_posts.*, y_meta.*
    From wp_posts As y_posts
    Inner Join wp_postmeta As y_meta
    On y_posts.ID = y_meta.post_id
    Where y_posts.post_type = 'download'
    And y_posts.post_status = 'publish'
    And y_meta.meta_key = 'y_activity_locations' 
    And y_meta.meta_value Like '%Armidale%'
    Or y_meta.meta_key = 'y_age'
    Or y_meta.meta_value Like '%3 to 5%'

这个查询有效,它只给我年龄或位置数据,但我想同时搜索这两个值。

我也尝试过子查询(以前从未尝试过)

Select y_posts.*, y_meta.*
From wp_posts As y_posts
Inner Join wp_postmeta As y_meta
On y_posts.ID = y_meta.post_id
Where y_posts.post_type = 'download'
And y_posts.post_status = 'publish'
And y_meta.meta_key = 'y_activity_locations' 
And y_meta.meta_value Like '%Armidale%'
And (Select yy_meta.* From wp_postmeta As yy_meta Where yy_meta.meta_key = 'y_age'
And yy_meta.meta_value Like '%3 to 5%')

但它给了我这个错误

1241 - 操作数应包含 1 列

所以请指导我如何从同一列中获取两个值。

请只给我查询建议而不是任何其他解决方案。

【问题讨论】:

  • 如果你只想要查询建议,那你为什么要用 php 标记它?
  • 我的意思是没有插件建议

标签: php mysql sql wordpress


【解决方案1】:

请尝试以下查询:

    Select y_posts.*, y_meta.*
    From wp_posts As y_posts
    Inner Join wp_postmeta As y_meta
    On y_posts.ID = y_meta.post_id
    Where y_posts.post_type = 'download'
    And y_posts.post_status = 'publish'
    And (
        (y_meta.meta_key = 'y_activity_locations' 
        And y_meta.meta_value Like '%Armidale%')
        Or (y_meta.meta_key = 'y_age'
        And y_meta.meta_value Like '%3 to 5%')
    )

【讨论】:

  • 你的答案完美无缺......请在你的答案中告诉我这个逻辑和 y_posts.post_status = 'publish' 和 ( ) ... 为什么我们将元键和值包装在再来一个()...我会在几分钟内接受您的回答...t​​hanx :)
  • 非常欢迎并感谢您的投票。我已经包装了 meta_key 和 meta_value 因为我们需要它们之间的条件,并且我们需要根据您的要求组合它们的 OR 条件。
【解决方案2】:

你试试,wordpress 查询

<?php 
$argsCat = array(   
    'posts_per_page'    => -1,              
    'post_type'        => 'download',
    'meta_key'         => 'y_activity_locations',
    'meta_value'       => '%Armidale%',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'y_age',
            'value' => '3',
            'compare' => '>='
        ),
        'relation' => 'AND',
        array(
            'key' => 'y_age',
            'value' => '5',
            'compare' => '<='
        )
    ),

);  
$normal_array = get_posts($argsCat);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多