PHP Поиск по имени и фамилии - PullRequest
1 голос
/ 22 марта 2020

мой партнер по проекту и я относительно новичок в PHP и нуждались в некоторой помощи в поиске по нескольким столбцам. Мы пытаемся создать работающую панель поиска, которая возвращает имя и соответствующий URL-адрес юмористической комедии в зависимости от имени и фамилии, по которым был произведен поиск. Мы заставили его работать с именем ИЛИ фамилией, которую искали, но не с обоими. (то есть Сара или Сильверман будут работать, но не Сара Сильверман) Мы попытались изменить предложение на AND, но это не сработало вообще. Ниже приведен наш поисковый код. Строка

$searchdb = mysqli_query($con,"SELECT * 
                                FROM comedian 
                                WHERE fname LIKE '%$searchq%' 
                                OR lname LIKE '%$searchq%'") 
        or die ("Could not search.");

- это то, что мы пытаемся изменить. Спасибо!

 <?php
session_start();

$con = mysqli_connect('localhost','root','') or die("Could not connect");

mysqli_select_db($con, 'youtube') or die(mysqli_error($con));
$output = '';

if(isset($_POST['search'])){
    $searchq = $_POST['search'];
    //Will replace everything that is not a letter or number with blank.
    $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

    $searchdb = mysqli_query($con,"SELECT * 
                                    FROM comedian 
                                    WHERE fname LIKE '%$searchq%' 
                                    OR lname LIKE '%$searchq%'") 
            or die ("Could not search.");
    $count = mysqli_num_rows($searchdb);

    if($count == 0){
        $output = 'There were no search results.';
        print("$output");
    }else{
        while($row = mysqli_fetch_array($searchdb)){
            //Variables
            $fname = $row['fname'];
            $lname = $row['lname'];
            $comedianid = $row['comedianid'];

            //Output first and last name
            $output .= '<div> <b>Comedian:</b> '.$fname.' '.$lname.'</div>';



            //Matching comedian with respective video URL using about table relation.
            $searchdb2 = mysqli_query($con,"SELECT * FROM about WHERE comedianid LIKE '%$comedianid%'") or die ("Could not find a video by this author.");
            //Fetches comedian id from about table
            $row2 = mysqli_fetch_array($searchdb2);
            $url = $row2['url'];

            $outputvid = preg_replace("#.*youtube\.com/watch\?v=#","",$url);
            $outputvid = '<iframe width="700" height="600" src="https://www.youtube.com/embed/'.$outputvid.'"></iframe>';


            print("$output");   
            print("$outputvid");

            $output = '';
        }



    }

}

1 Ответ

0 голосов
/ 22 марта 2020

Вы можете объединить имя и фамилию, а затем выполнить поиск на основе этой строки ...

SELECT * 
FROM comedian 
WHERE fname ||  ' ' || lname LIKE '%Sarah Silverman%'

Это покажет «Сара Сильверман», даже если Сара хранится в fname, а Сильверман в lname

Редактировать : Я проверил это в SQLite, возможно, вам придется изменить || на + в зависимости от вашей системы управления базами данных.

...