2015-05-27 3 views
1

Я спрашиваю это потому, что я ищу PHP запрос для MySQL, как следующее:Можно ли искать все столбцы через таблицу MySQL в запросе PHP без ввода имени каждого столбца?

SELECT * FROM users WHERE ALL_COLUMNS LIKE '%" . $search . "%' 

Существует ли запрос, как это? Или я должен ввести запрос так:

SELECT * FROM users 
WHERE 
    user_email LIKE '%" . $search. "%' 
    OR user_name LIKE '%" . $search. "%' 
    OR first_name LIKE '%" . $search. "%' OR [...] 
+2

Просто FYI, это, скорее всего, убийство вашей производительности по мере увеличения размера таблицы. – castis

+0

Я думаю, что это был бы полезный вопрос, где его нужно было бы использовать в нескольких таблицах с умеренными размерами таблиц. – Kelsey

+1

Я относительно уверен, что то, что вы ищете, не существует. Его полезность будет ограничена несколькими вариантами кросс, и это не очень хорошая идея запускать что-то вроде этого в производстве в любом случае. Вы могли бы заставить PHP генерировать SQL-запрос для вас и идти по этому маршруту. Тем не менее, я не администратор базы данных. – castis

ответ

1

Обратите внимание, что вы, вероятно, может достичь чего-то вроде этого в вашем любимом mysql интерфейсе, я использую SQLyog и вы можете сделать это с помощью инструмента «Поиск данных», я Конечно, у другого программного обеспечения, такого как workbench mysql, есть аналогичный вариант.

В любом случае, вы можете запросить у вас PHP-запрос. Получить все столбцы в массиве, запрашивая information_schema, а затем сделать строку с каждого столбца имя как

"columnName LIKE '%$search%'" 

, а затем implode его на " OR ", как это:

//what is the search? 
$search = "something"; 
//get all the columns 

    $columns = mysqli_query("SELECT 
    COLUMN_NAME 
FROM 
    information_schema.COLUMNS 
WHERE TABLE_NAME = 'users' 
    AND TABLE_SCHEMA = 'yourDatabaseName' "); 

//put each like clause in an array 
$queryLikes = array(); 
while ($column = mysqli_fetch_assoc($columns)) { 
    $queryLikes[] = $column['COLUMN_NAME'] . " LIKE '%$search%'"; 
} 

$query = "SELECT * FROM users WHERE " . implode(" OR ", $queryLikes); 
echo $query; //should look like this: 
//SELECT * FROM users WHERE column1 LIKE '%something%' OR column2 LIKE '%something%' OR column3 LIKE '%something%' OR ... 
//so then 
$users=mysqli_query($query); 
while ($user = mysqli_fetch_assoc($users)) { 
    //do stuff with $user 
} 
0

Это довольно просто: Просто перебирайте все столбцы в таблице и проверяйте их на нужное значение.

Этот пример ищет колонку под названием «колонка»

$qry= mysql_query("select * from $tblName order by id"); 
while($row = mysql_fetch_assoc($qry)){ 
    if($searchItem == $row['column']){ 
     echo "Match found!"; 
     break; 
    } 
}