【问题标题】:How can I combine 2 columns in sql table to search for full names如何组合 sql 表中的 2 列来搜索全名
【发布时间】:2012-06-15 16:49:03
【问题描述】:

我有一个带有 FirstName 和 LastName 列的 mySQL 数据库,目前我有一个搜索 Lastnames 的搜索查询,当 LastNames 匹配时,它们会在屏幕上与它所在行的 FirstName 一起回显,现在太好了,我将想知道的是如何使查询搜索输入到输入字段中的全名,请记住,我没有全名列,全名将是用户输入的内容,下面是一个示例我现在有工作!谢谢。

if(isset($_GET['name'])){   
    $raw_name=$_GET['name'];

    if(preg_match("/[A-Z | a-z]+/", $raw_name)){        
        $name=$raw_name;        
        include "connect.php";      
        //-query the database table
        $sql="SELECT userId, FirstName, LastName FROM residential2 WHERE FirstName='" . $name   ."'";
        //-run the query against the mysql query function
        $result=mysql_query($sql);
        //-count results
        $numrows=mysql_num_rows($result);

        echo "<div align=\"center\">" . $numrows . " results found for " . stripslashes($name) . "</div>";

        while($row=mysql_fetch_array($result)){         
            $FirstName =$row['FirstName'];
            $LastName=$row['LastName'];
            $userId=$row['userId']; 
            //-display the result of the array
            echo "<ul>\n"; 
            echo "<li>" . "<a href=\"index.php?id=$userId\">" . $LastName . " "  .$FirstName . "   </a></li>\n";
            echo "</ul>";
        }
    }
    else {      
        echo "<p>Please enter a search query</p>";
    }
}

【问题讨论】:

    标签: php mysql phpmyadmin


    【解决方案1】:

    使用concat()

    $sql="SELECT userId, CONCAT(FirstName, ' ', LastName) AS fullname FROM residential2 WHERE FirstName='" . $name   ."'";
    
    <?php
        $fullname = $row['fullname']; 
    ?> 
    

    【讨论】:

    • 或者,您可以在服务器端展开搜索查询(全名)并与数据库中的名字和姓氏进行比较
    • 只有当你有正确的问题时,你会看到你已经回答了,他正在寻找..
    • @xbonez - 将搜索查询拆分为多个部分并将这些部分与数据库字段进行比较的问题是,当您有人输入“Philip Seymour Hoffman”之类的名称时。 Seymour 会出现在名字还是姓氏字段中?
    • @andrewsi:您可以将分解数组的第 0 个索引作为名字发送,将最后一个索引作为姓氏发送。类似WHERE FirstName LIKE {split[0]} OR LastName LIKE {split[n]}
    • 不过,您假设名字始终是完整的名字;如果 Philip Seymour Hoffman 将 Seymour 视为他的姓氏的一部分,而 Tommy Lee Jones 将 Lee 视为他的名字的一部分,那么您不能进行简单的拆分。
    【解决方案2】:

    非常非常简单!!

    SELECT * FROM your_table WHERE CONCAT( field1, ' ' , filed2 ) like '% $query %'

    【讨论】:

      【解决方案3】:

      你可以这样做:

      $sql="SELECT userId, FirstName, LastName 
                  FROM residential2 
                  WHERE concat(FirstName, ' ', LastName) like '%$name%'";
      

      【讨论】:

        【解决方案4】:

        您必须将全名拆分为名字和姓氏,然后进行相应的搜索。给你一个代码sn-p:

        SELECT REVERSE(SUBSTR(REVERSE(name),INSTR(REVERSE(name),' ')+1)) AS first_name,
        REVERSE(SUBSTR(REVERSE(name),1,INSTR(REVERSE(name),' '))) AS last_name
        

        希望对你有帮助。

        【讨论】:

          【解决方案5】:
          $frnd_name = trim(preg_replace( "/[ ]+/", " ", $_GET['frnd_search'] ) );
          $arr = explode(" ", $frnd_name, 2);
          
          if(!empty($arr[1]))
              $sql_where = "name LIKE '%".$arr[0]."%' AND lastname LIKE '%".$arr[1]."%'";
          else
              $sql_where = "name LIKE '%".$arr[0]."%' OR lastname LIKE '%".$arr[0]."%' OR username LIKE '%".$arr[0]."%' OR email LIKE '%".$arr[0]."%'";
          
          $sql = "SELECT name,lastname,username,email FROM user WHERE ".$sql_where;
          $result = $conn->query($sql);
          
          if ($result->num_rows > 0) {
              while($row = $result->fetch_assoc()) {
                  echo "".$row['name']." ".$row['lastname']."<br>";
              }
          }
          

          【讨论】:

            【解决方案6】:
            SELECT lname, fname FROM TABLE where CONCAT(fname, ' ', lname) LIKE '%$fullname%'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-04-22
              • 1970-01-01
              • 1970-01-01
              • 2017-03-02
              • 1970-01-01
              • 1970-01-01
              • 2017-11-11
              • 1970-01-01
              相关资源
              最近更新 更多