PHP/MySql在数组中搜索一个值


PHP/MySql search one value in an array

我正试图根据特定的provence从我的usermeta表中获取值。我住在荷兰。我们这里有12个provence,我想选择所有居住在某个provenes的用户。因此,我在用户数据库中添加了一个名为"provisions"的字段。值为<a href="results.php?provincie=provencename"的按钮告诉我根据url中的值来选择谁。

这并不难。问题是用户可能有多个来源
因此,元密钥provincie字段包含元值friesland','groningen','drenthe'

所以现在我需要搜索url中添加的值是否在数据库meta_value中。

$provincie_array = "friesland','groningen','drenthe"; 
$query = "SELECT * 
          FROM $wpdb->usermeta 
          WHERE meta_key='provincie' 
          AND meta_value IN ('".$provincie_array."')";

我认为这是对的。然而,PHP和MySql却不谋而合。

有人能看到我在这里缺了什么吗?

-编辑-

$provincie = $_GET['provincie'];
                global $wpdb;
                //$query = "SELECT * FROM $wpdb->usermeta WHERE meta_key='provincie' AND meta_value IN ('".$provincie_array."')";
$provincie_array = array('friesland','groningen','drenthe','noordholland','flevoland','overijssel','zuidholland','utrecht','gelderland','zeeland','noordbrabant','limburg'); 
$provincie_check = '';
foreach ($provincie_array as $value) {
    $provincie_check[]="`meta_value` LIKE '%[{$value}]%'";
}
$query = "SELECT * 
          FROM $wpdb->usermeta 
          WHERE meta_key='provincie' 
          AND ( ".implode(' OR ',$provincie_check)." )";
          $personen = $wpdb->get_results($query);

这将起作用…:)

对于@Interactive:您设置$find_provicie=$_GET['province'];就是这样。

$find_provincie = 'groningen'; //look for 1
$find_provincie = array('friesland','groningen'); //look for multiple

if(is_array($find_provincie)){
    $provincie_check = '';
    foreach ($find_provincie as $value) {
        $provincie_check[]="`meta_value` LIKE '%[{$value}]%'";
    }
    $provincie_check=implode(' OR ',$provincie_check);
}else{
    $provincie_check = "`meta_value` LIKE '%[{$find_provincie}]%'";
}
$query = "SELECT * FROM usermeta WHERE meta_key='provincie' AND ( ".$provincie_check." )";

如果您将每个元素存储在括号中,如:[groningen][drenthe]

,则测试并工作

试试这个:

$provincie_array = array("friesland","groningen","drenthe"); 
$query = "SELECT * 
      FROM $wpdb->usermeta 
      WHERE meta_key='provincie' 
      AND meta_value IN ('".implode(",", $provincie_array)."')";

我认为您的数据库结构不理想。如果在一个字段中存储多个值,则需要搜索字符串。

尝试使用"like"语句(不是最好的,也不是最快的),但在您的情况下可以,除非您决定更改数据库结构。

您的查询应该如下所示:

$query = "SELECT *
          FROM $wpdb->usermeta
          WHERE meta_key='provincie'
          AND (
                meta_value LIKE '%friesland%'
                OR meta_value LIKE '%groningen%'
                OR meta_value LIKE '%drenthe%'
          )";

因此,在php中,您应该这样做:

$provincie_array = array('friesland','groningen','drenthe');
$querypart = "meta_value LIKE '%".implode("%' OR meta_value LIKE '%", $provincie_array)."%'";
$query = "SELECT *
          FROM $wpdb->usermeta
          WHERE
            meta_key='provincie'
            AND (".$querypart.")";