如何在MySQL查询中

如何在MySQL查询中

我不知道如何在MySQL查询中创建循环。
我有这样的疑问:

<?php
    $arr = explode(',', $features);
    $query_spicy = "
    SELECT wposts.*
        FROM $wpdb->posts wposts
    INNER
        JOIN ( SELECT post_id
               FROM $wpdb->postmeta wpostmeta
                    WHERE (';
                                ( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%test1%' )
                            OR
                                ( wpostmeta.meta_key = 'features'AND wpostmeta.meta_value LIKE '%test2%' )
                            OR
                                ( wpostmeta.meta_key = 'features'AND wpostmeta.meta_value LIKE '%test3%' )
                            OR
                                ( wpostmeta.meta_key = 'features'AND wpostmeta.meta_value LIKE '%test4%' )
                            OR
                                ( wpostmeta.meta_key = 'features'AND wpostmeta.meta_value LIKE '%test5%' )
                    ')
                    GROUP BY post_id
            ) AS t ON t.post_id = wposts.ID WHERE wposts.post_status = 'publish' AND wposts.post_type = 'book' ORDER BY wposts.post_date DESC";
?>

我想用for循环生成bellow部分动态:
( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%test1%' ) OR
( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%test2%' ) OR
( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%test3%' ) OR
( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%test4%' ) OR
( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%test5%' )

注意:test1,test2,test3,test4和test5,我从这里得到$arr
我希望你能理解我的问题,如果你能帮助我,我将不胜感激。
谢谢:)

最佳答案

试试像这样的

$arr = explode(',', $features);
$conditions = array();

foreach($arr as $feature){
    $condition[] = "( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '{$feature}' )";
}
$query = "SELECT ...". join("OR",$conditions);

但您可以简单地执行wpostmeta.meta_key='feature'和wpostmet IN($features)之类的操作
我认为第二种方法更好更快。

关于php - 如何在MySQL查询中编写PHP代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22193327/

10-12 13:06