2015-05-27 30 views
1

我問這個,因爲我要尋找一個PHP查詢爲MySQL這樣的:是否可以在PHP查詢中通過MySQL表搜索所有列,而不必輸入每個列名?

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

僅供參考,這很可能會謀殺你的表現作爲表大小的增加。 – castis

+0

我認爲這將是一個有用的查詢,它將不得不在具有中等表大小的多個表中使用。 – Kelsey

+1

我相對確定你正在尋找的東西不存在。它的用處僅限於少數邊緣情況,在生產中運行類似這樣的東西並不是一個好主意。您可以讓PHP爲您生成sql查詢並轉到該路線。這就是說,我不是DBA。 – castis

回答

1

注意,你也許可以做到這樣的事情在你最喜歡的mysql前端,我用SQLyog的,你可以做到這一點與「數據搜索」的工具,我當然,像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; 
    } 
} 
相關問題