通过分隔逗号搜索不同的列

时间:2016-02-23 21:01:01

标签: php mysql

我有一个表格,其中包含姓名,电子邮件地址,电话号码等信息。 My Database

让我假装我有30个同名的联系人,但他们都住在不同的城市。如何拆分逗号并将其替换为and ...

示例 SELECT * WHERE name %$searchString% OR city %$searchString%...

现在$searchString包含逗号

SELECT * WHERE name %$searchString% OR city %$searchString%... AND SELECT * WHERE name %$searchString2% OR city %$searchString2%...

$searchString2包含以逗号分隔的信息。

更新

我想一遍又一遍地搜索每一行,就像逗号一样多次。 对不起,我无法解释自己

3 个答案:

答案 0 :(得分:1)

这取决于您是要返回名称或城市与搜索值完全匹配的行(=),还是名称或城市的任何部分与搜索值匹配的行( LIKE)。

无论您需要哪一个,都可以将搜索字符串转换为如下字符串数组开始:

$strings = array_map('trim', explode(',', $searchString));

array_map('trim'...可确保您不要在逗号分隔的搜索字符串中的逗号之前或之后匹配任何空格。

以下是如何使用PDO中的预准备语句执行查询的示例。首先,使用IN完整匹配:

$phs = rtrim(str_repeat('?,', count($strings)),',');
$stmt = $pdo->prepare("SELECT * FROM your_table WHERE name IN ($phs) OR city IN ($phs)");
// double the string values to us in both INs
$values = array_merge($strings, $strings);
$stmt->execute($values);

和使用LIKE的部分匹配:

$sql = '';
foreach ($strings as $string) {
    $sql .= ' name LIKE ? OR city LIKE ? OR';
    $values[] = $string;
    $values[] = $string;
}
$stmt = $pdo->prepare('SELECT * FROM your_table WHERE' . rtrim($sql, ' OR'));
$stmt->execute($values);

答案 1 :(得分:0)

您需要在SQL语句中使用WHERE IN。

SELECT * WHERE name LIKE '%$searchString%' AND city IN ('city1', 'city2', 'city3'...)

以下是关于如何在PHP中执行此操作的良好讨论:Passing an array to a query using a WHERE clause

答案 2 :(得分:0)

这样的东西?

您需要转义/清除searchString的值。

<?php

// $searchString = "Cardiff,London,New York";

$SQL = 'SELECT * FROM table WHERE ';

$searchStrings = explode(',',$searchString);

$SQLArray = array();

foreach($searchStrings as $searchString) {
    $SQLArray[] = "name LIKE '%$searchString%'";
    $SQLArray[] = "city LIKE '%$searchString%'";
}

$SQL .= implode(' OR ',$SQLArray);

// print $SQL;

?>