Поэтому у меня есть эта система PM.
В поле получателя вы можете ввести полное имя того, с кем хотите писать.
Поэтому я хочу помочь пользователю, если он не помнит имя.
Поэтому, если вы хотите написать полное имя «Megan Fox» и знать только:
Megan Megan F Megan Fo Meg Fo M Fox etc..
Он вернется. «Вы имели в виду Меган Фокс?» Это уже отлично работает.
Теперь мне нужно, чтобы в этом было то, что если вы пишете только Fox, без первого имени, я хочу, чтобы он эхо «Вы имели в виду Меган Фокс?»
Вот где я застрял, поскольку он создает $ lastname после пробела. И я действительно не хочу использовать два поля для первого и последнего.
Как я могу это сделать?
Вот мой код:
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $mot, 2)); $qur = mysql_query(" SELECT id, firstname, lastname, (firstname = '$firstname' AND lastname = '$lastname') AS full FROM users WHERE (firstname = '$firstname' AND lastname='$lastname') OR (firstname LIKE '$firstname%' AND lastname LIKE '$lastname%') ORDER BY (firstname = '$firstname' AND lastname='$lastname') DESC"); $get = mysql_fetch_array($qur); if($get["full"] == 1){ echo $get["id"]; }else{ echo "Did you mean: ".$get["firstname"]." ".$get["lastname"]." ?"; }
Это должно сработать.
$qur = mysql_query(" SELECT id, firstname, lastname, (firstname = '$firstname' AND lastname = '$lastname') AS full FROM users WHERE (firstname = '$firstname' AND lastname='$lastname') OR (firstname LIKE '$firstname%' AND lastname LIKE '$lastname%') OR ('$lastname' = '' AND lastname LIKE '$firstname%') ORDER BY (firstname = '$firstname' AND lastname='$lastname') DESC");
OR ('$lastname'='' AND lastname LIKE '$firstname%')
Я думаю, что лучше сопоставлять одно значение вместо двух. Например, трудно догадаться, где первое имя и где последний, поскольку пользователь может ввести Magan Fox или Fox Megan.
поэтому запрос будет выглядеть так:
SELECT id, firstname, lastname, CONCAT (firstname, ' ', lastname) AS fullname FROM `users` WHERE firstname LIKE '{$string}%' OR lastname LIKE '{$string}%' GROUP BY firstname, lastname ORDER BY firstname ASC, lastname ASC