我正在尝试让我的网站搜索框能够在一个查询中搜索多个表。
因此,如果用户搜索存储在ptb_profiles中的用户display_name,则会得到具有匹配名称的任何用户,或者如果搜索存储在ptb_stats中的国籍,则会显示具有该国籍的所有用户。
当我最初使用SELECT * FROM ptb_users, ptb_stats, ptb_profiles这样做时,我得到了重复的搜索结果,相同的结果被多次显示,所以我试图避免这种情况,并通过分组和使用联合来使每个结果只显示一次,但这并不起作用。
现在我试着这样做:
$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有没有人能告诉我我哪里错了?
发布于 2012-12-11 05:03:50
这不是唯一的方法。但是,如果对查询应用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中没有记录,请将您的连接更改为左连接...
发布于 2012-12-11 05:33:45
mysql_fetch_array()抱怨$query_for_result不是查询结果。您必须检查mysql_query()的返回值。如果您的SQL语句有问题,则返回false。至少也是这样
$sql = "select ...";
$result = mysql_query($sql) or die("Error in $sql: " . mysql_error());以防止和诊断此类错误。
https://stackoverflow.com/questions/13809054
复制相似问题