0

Web サイトの検索ボックスで、1 つのクエリで複数のテーブルを検索できるようにしようとしています。

したがって、ユーザーdisplay_nameがに保存されptb_profilesているユーザーを検索すると、一致する名前を持つユーザーが表示されます。または、に保存されptb_statsている国籍で検索すると、その国籍を持つすべてのユーザーが表示されます。

最初に使用してこれを行ったときSELECT * FROM ptb_users, ptb_stats, ptb_profiles、検索結果が重複し、同じ結果が複数回表示されていたので、これを回避し、グループ化とユニオンオールを使用して各結果を1回だけ表示しようとしましたが、うまくいきませんでした。

今、これを試しました:

$query_for_result=mysql_query("SELECT display_name, location, gender, contact_number FROM ptb_profiles WHERE display_name LIKE '%".$query."%' OR location LIKE '%".$query."%' OR gender LIKE '%".$query."%' OR contact_number LIKE '%".$query."%' JOIN SELECT email, subscription FROM ptb_users WHERE email like '%".$query."%' OR subscription like '%".$query."%' JOIN SELECT nationality, hobbies, local_station FROM ptb_stats WHERE nationality like '%".$query."%' OR hobbies like '%".$query."%' OR local_station like '%".$query."%' 
        LIMIT 5");

しかし、これは次のエラーを引き起こします:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PTB1/includes/mod_sidebar/search.php on line 31

誰かが私が間違っているところを教えてもらえますか?

4

2 に答える 2

0

これが唯一の方法ではないでしょう。ただし、クエリに GROUP BY を適用すると、結合された複数のテーブルで検索を実行し、個別のユーザー リストを簡単に取得できます。すべてのテーブルが ID 列を介して関連付けられていると仮定すると、このようなものが機能する可能性があります...

SELECT u.* FROM ptb_users u
INNER JOIN ptb_stats s ON s.user_id=u.id
INNER JOIN ptb_profiles p ON p.user_id=u.id
WHERE "this or that"
GROUP BY u.id

ユーザーが ptb_stats または ptb_profiles にレコードを持っていない可能性がある場合は、結合を LEFT JOINS に変更します...

于 2012-12-10T21:03:49.860 に答える
0

mysql_fetch_array()$query_for_resultクエリ結果ではないことについて文句を言います。からの戻り値を確認する必要がありますmysql_query()。SQL ステートメントに問題がある場合は、false を返します。少なくともそうする

$sql = "select ...";
$result = mysql_query($sql) or die("Error in $sql: " . mysql_error());

このようなエラーを防止および診断します。

于 2012-12-10T21:33:45.470 に答える