0

我试图让我的网站搜索框能够在一个查询中搜索多个表。

因此,如果用户搜索display_name存储在其中的用户,ptb_profiles他们会得到任何具有匹配名称的用户,或者如果他们按存储在其中的国籍进行搜索,则会ptb_stats显示所有具有该国籍的用户。

当我最初通过使用执行此操作时,SELECT * FROM ptb_users, ptb_stats, ptb_profiles我得到了重复的搜索结果,并且多次显示相同的结果,所以我试图避免这种情况,并且每个结果仅通过分组和使用 union all 显示一次,但这不起作用。

现在我试过了:

$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

mysql_fetch_array() complains about $query_for_result not being a query result. You must check the return value from mysql_query(). It returns false, if there's some problem with your SQL statement. So do at least

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

to prevent and diagnose such errors.

于 2012-12-10T21:33:45.470 回答
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 回答