[英]How to write PHP code inside MySQL query
我很困惑如何在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循环动态生成波纹管零件:
( 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)的操作
我认为第二种解决方案更好,更快。
尝试这个
wpostmeta.meta_key =“。$功能。” AND wpostmeta.meta_value类似于'%test1%'
<?php
$arr = explode( ',', $features );
$query_spicy = "
SELECT wposts.*
FROM {$wpdb->posts wposts}
INNER
JOIN ( SELECT post_id
FROM {$wpdb->postmeta wpostmeta}
WHERE (";
$tmp = array();
foreach( $arr as $value )
{
$tmp[] = "( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%{$value}%' )";
}
$query_spicy .= implode( ' OR ', $tmp );
$query_spicy .= ")
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";
?>
FWIIW:
只需设置一个数组以包含您需要插入的数据,然后使用foreach遍历它即可。
$sql="SELECT wposts.*
FROM $wpdb->posts wposts
INNER
JOIN ( SELECT post_id
FROM $wpdb->postmeta wpostmeta
WHERE ('; ";
foreach($arrayoftestdata as $test)
{
$sql.="( wpostmeta.meta_key = 'features' AND wpostmeta.meta_value LIKE '%$test%' ) OR ";
}
$sql.="')
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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.