¿Cómo puedo combinar 2 columnas en la tabla sql para buscar nombres completos?

Tengo una base de datos mySQL con una columna Nombre y Apellido y actualmente tengo una consulta de búsqueda que busca Apellidos, y cuando los Apellidos coinciden, se repiten en la pantalla junto con el Nombre de su fila. Eso es genial, lo que me gustaría encontrar. es cómo puede hacer que la consulta busque FullNames que se escriben en el campo de entrada, tenga en cuenta que no tengo una columna FullName, el nombre completo será lo que el usuario escriba, a continuación se muestra un ejemplo de lo que tengo actualmente ¡laboral! Gracias.

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>";
    }
}

preguntado el 12 de junio de 12 a las 19:06

6 Respuestas

Utiliza concat()

$sql="SELECT userId, CONCAT(FirstName, ' ', LastName) AS fullname FROM residential2 WHERE FirstName='" . $name   ."'";

<?php
    $fullname = $row['fullname']; 
?> 

Respondido el 12 de junio de 12 a las 19:06

Alternativamente, puede explotar la consulta de búsqueda (nombre completo) en el lado del servidor y compararla con los nombres y apellidos de la base de datos: xbonez

solo si tiene las preguntas correctamente, verá que ha respondido, y lo que está buscando .. - Rajat Singhal

@xbonez: el problema de dividir la consulta de búsqueda en partes y comparar las partes con los campos de la base de datos es cuando hay personas que ingresan nombres como 'Philip Seymour Hoffman'. ¿Seymour estará en el campo de nombre o apellido? - Andrewsi

@andrewsi: podría enviar el índice 0 de la matriz explotada como nombre y el último índice como apellido. Algo como WHERE FirstName LIKE {split[0]} OR LastName LIKE {split[n]} - xbonez

Sin embargo, está asumiendo que el primer nombre siempre será el nombre completo; si Philip Seymour Hoffman considera a Seymour como parte de su apellido, mientras que Tommy Lee Jones considera a Lee como parte de su nombre, no se puede hacer una división simple. - Andrewsi

es muy muy simple!!

SELECCIONE * DESDE su_tabla DONDE CONCAT (campo1, ' ', archivado2) como '% $consulta %'

respondido 08 nov., 13:07

Puedes hacerlo:

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

Respondido el 12 de junio de 12 a las 19:06

Tendrá que dividir el nombre completo en nombre y apellido y luego buscar en consecuencia. Un fragmento de código para usted:

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

Espero eso ayude.

Respondido el 12 de junio de 12 a las 19:06

$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>";
    }
}

respondido 19 mar '17, 12:03

SELECT lname, fname FROM TABLE where CONCAT(fname, ' ', lname) LIKE '%$fullname%'

Respondido el 25 de diciembre de 21 a las 12:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.