首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对搜索查询进行分组还是合并?

问对搜索查询进行分组还是合并?
EN

Stack Overflow用户
提问于 2012-12-11 04:54:20
回答 2查看 50关注 0票数 0

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

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

当我最初使用SELECT * FROM ptb_users, ptb_stats, ptb_profiles这样做时,我得到了重复的搜索结果,相同的结果被多次显示,所以我试图避免这种情况,并通过分组和使用联合来使每个结果只显示一次,但这并不起作用。

现在我试着这样做:

代码语言:javascript
复制
$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");

但这只会带来以下错误:

代码语言:javascript
复制
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

有没有人能告诉我我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2012-12-11 05:03:50

这不是唯一的方法。但是,如果对查询应用GROUP BY,则可以在多个连接表上进行搜索,并轻松获取不同的用户列表。假设您所有的表都通过一个ID列进行关联,如下所示可能会起作用……

代码语言:javascript
复制
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中没有记录,请将您的连接更改为左连接...

票数 0
EN

Stack Overflow用户

发布于 2012-12-11 05:33:45

mysql_fetch_array()抱怨$query_for_result不是查询结果。您必须检查mysql_query()的返回值。如果您的SQL语句有问题,则返回false。至少也是这样

代码语言:javascript
复制
$sql = "select ...";
$result = mysql_query($sql) or die("Error in $sql: " . mysql_error());

以防止和诊断此类错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13809054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档