MySQL несколько запросов с PHP - PullRequest
0 голосов
/ 08 августа 2009

Я пытаюсь получить результаты поиска для чьего-то имени, затем имя и фамилия для каждого поиска по каждому полю 'first' и 'last'.

Но нужно покинуть комнату, что если кто-то ищет имя первого последнего мидла, например = $ who = James David Smith, оно взорвется и найдет каждое из имен по первому столбцу и последнему столбцу. В том случае, если пользователь вводит имя фамилия первым или добавляет отчество.

Вот то, что у меня есть, но я застрял. Помогите. Пожалуйста. * * 1005

<?

$search = explode(' ', $who);

$limit=verify($get['page'])?" limit ".($get['page']*10).",10":" limit 10";

$q="select * from users where (first IN('%$search[]%') or last IN('%$search[]%') or full_name LIKE '%".$get['who']."%') AND (city LIKE '%".$get['where']."%' or province LIKE '%".$get['where']."%') order by province";        

$rows=get_recordset($q);

if(count($rows)){
    foreach($rows as $row){

echo $q;

?>

Ответы [ 2 ]

2 голосов
/ 08 августа 2009

Я не уверен, что получил вас, но если вы имеете в виду:

Если у вас есть 3 имени, тогда - проверьте все имена по всем трем полям (первое, последнее, полное имя).

Если у вас есть только 2 имени, тогда - проверить имя по первому полю и фамилию по последнему полю

тогда это должно быть сделано:

$search = explode(' ', $who);
if (count($search) >2) { // in case we do got a middle name - 
    $whereNameStringsArr = array();
    foreach ($search as $val) {
        $whereNameStringsArr[] =  " first LIKE '%$val%' 
                        OR last LIKE '%$val%' 
                        OR full_name LIKE '%$val%' ";
    }
    $whereNameClause = implode(" OR ",$whereNameStringsArr);
} else { // in case we don't got a middle name
    $whereNameClause =  " first LIKE '%{$search[0]}%' 
                OR last LIKE '%{$search[1]}%' ";
}
$limit=verify($get['page'])?" limit ".($get['page']*10).",10":" limit 10";
$q="select * from users where  ($whereNameClause) 
                AND (city LIKE '%".$get['where']."%' or province LIKE '%".$get['where']."%') 
                order by province
                $limit";        

$rows=get_recordset($q);
....

Конечно - убедитесь, что вы проверяете все данные, которые вы получаете от ввода пользователя

0 голосов
/ 08 августа 2009

Так почему бы не сделать нечеткий поиск? Когда вы взорвете данные, сделайте что-то вроде этого:

$name = $_POST['name'] // John Michael Smith

$first_name = substr($name, 0, strrpos($name, ' ')); //Returns everything before last space, ie John Michael

$last_name = strstr($name, ' '); //Returns everything after first space, ie John Michael

Теперь вы просто запускаете запрос mysql, но настраиваете его на поиск всего, что содержит вышеуказанные значения (поиск по подстроке), с помощью LOCATE:

$results = mysql_query("SELECT * FROM names 
                WHERE LOCATE(firstname, '$first_name') > 0 OR 
                      LOCATE(lastname, '$last_name')   > 0
                ORDER BY lastname

Полагаю, вы знаете, что делать с результатами.


Быстрое обновление, если вы беспокоитесь о пользователях, вводящих фамилию, имя, отчество, или что у вас есть, вы всегда можете использовать вышеперечисленное, но найти всю строку:

$results = mysql_query("SELECT * FROM names 
                WHERE LOCATE(firstname, '$name') > 0 OR 
                      LOCATE(lastname, '$name')   > 0
                ORDER BY lastname

Это проверит оба столбца на наличие каких-либо экземпляров строки. Вы, вероятно, должны (после очистки строки, как уже было правильно предложено) также удалить любые запятые (но не дефисы) в случае, если кто-то вводит последний, первый или что у вас есть. замените их пробелами, а затем сократите все мульти-пробелы до одного пробела, чтобы быть уверенным в двойном.


Извините за это. Вот способ разделить имена (по пробелам). Там как проблема с моим substr синтаксисом:

 $name = $_POST['name'] // John Michael Smith

 $first_name = substr($name, 0, strrpos($name, ' ')); //Returns everything before last space, ie John Michael

 $last_name = strstr($name, ' '); //Returns everything after first space, ie John Michael
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...