2017-05-02 7 views
0

AJAXを使用してパワー検索を作成しようとしています.3つのテーブルで結果を探し、答えを1つのテーブルに返します。私はデータベース(テーブルあたり1つ)に3つの呼び出しを追加することでこれを達成しましたが、これは最適ではないと感じています。複数のテーブルを検索して1つの結果を生成する単一のクエリ

ユーザーは検索フィールドに入力し、AJAXを使用して入力したものをデータベースに送信します。この例は、理解しやすくするために可能な限り単純です。

例: ユーザー入力:テスト。

AJAX呼び出し:

SELECT 'User' AS table, f_name AS `name`, city FROM people WHERE f_name LIKE '%test%'; 
SELECT 'Company' AS table, `name`, city FROM companies WHERE `name` LIKE '%test%'; 
SELECT 'Store' AS table, `name`, city FROM stores WHERE `name` LIKE '%test%'; 

私はテーブルを生成する方法を説明していないです、その部分が解消されるので、AJAX呼び出しを形成します。私は現在、PHPでやっていることは次のとおりです。

$sql = SELECT .... FROM people ....; 
$res = mysqli... 
while($row = mysqli_fetch...) { 
    echo "<tr><td>{$row[table]}</td>...." 

$sql = SELECT .... FROM companies ....; 
$res = mysqli... 
while($row = mysqli_fetch...) { 
    echo "<tr><td>{$row[table]}</td>...." 

$sql = SELECT .... FROM stores ....; 
$res = mysqli... 
while($row = mysqli_fetch...) { 
    echo "<tr><td>{$row[table]}</td>...." 

結果:

+--------------+-------+------+ 
| table  | name | city | 
+--------------+-------+------+ 
| User   | test1 | 13 | 
| User   | test2 | 25 | 
| Company  | testc | 13 | 
| Store  | stest | 33 | 
+--------------+-------+------+ 

少ないHTTPリクエストを使用して、これを達成する簡単な方法はありますか?おそらくビューを使用して?

答えて

0

これは単にコメントに過ぎないと思いますが、私はコメントできません:なぜUNIONを使用しないのですか?

SELECT 'User' AS table, f_name AS `name`, city FROM people WHERE f_name LIKE '%test%' 
UNION 
SELECT 'Company' AS table, `name`, city FROM companies WHERE `name` LIKE '%test%' 
UNION 
SELECT 'Store' AS table, `name`, city FROM stores WHERE `name` LIKE '%test%' 

これは、クエリ文字列が1つのみで、正確に結果が得られます。

+0

ありがとうございました!私はその機能について知りませんでした。私はJOINで試していましたが、明らかに動作しませんでした。 –

+0

誰かがこの回答を読んでいる場合は、簡単にメモ:個々のクエリ間の ";"を削除してください。 –

関連する問題