php - 搜索框Where子句?

标签 php mysql

我有一个我制作的搜索框脚本。它在用户输入的 mysql 数据库中查找具有匹配查询的用户,例如用户名、位置等。

当我将其设置为从数据库中的一个表(即“ptb_profiles”)中进行选择时,该脚本工作正常,但是当我尝试添加更多表以供其搜索时,它不喜欢它并多次列出同一用户。它应该只根据用户输入的搜索查询为每个用户显示一次。

我已经对搜索结果的数量进行了限制,以节省空间并允许用户在单独的窗口中打开更多结果(但尚未完成)。需要明确的是,我不想将搜索限制为一个结果,而是列出 5 个结果,并且每个结果仅显示一次,具体取决于用户是否在 ptb_profiles 下搜索 display_name、在 ptb_stats 下搜索国籍或在 ptb_users 下搜索电子邮件。

任何人都可以建议我在 where 子句中哪里出了问题吗?谢谢。

<form method="get" action="">
<input type="text" name="query" class="search" placeholder="Search Name/Location" style="width:120px;"/>
<input type="image" src="../PTB1/assets/img/icons/loginarrow1.png" class="searchbutton" name="submit" value="Start Search" />
</form>

<?php
//PHP CODE STARTS HERE

if(isset($_GET['submit'])){

// Change the fields below as per the requirements
$db_host="localhost";
$db_username="root";
$db_password="";
$db_name="playtime";
$db_tb_atr_name="display_name";

//Now we are going to write a script that will do search task
// leave the below fields as it is except while loop, which will display results on screen

mysql_connect("$db_host","$db_username","$db_password");
mysql_select_db("$db_name");

$query=mysql_real_escape_string($_GET['query']);

$query_for_result=mysql_query("SELECT *
                        FROM ptb_profiles p, ptb_stats s, ptb_users u
                        WHERE p.display_name like '%".$query."%' 
        OR p.location LIKE '%".$query."%' OR p.hobbies LIKE '%".$query."%' OR s.nationality LIKE '%".$query."%'
        LIMIT 5");
echo "<div class=\"search-results\">";
while($data_fetch=mysql_fetch_array($query_for_result))
{

    echo "<div class=\"spacing\"><a href=\"profile.php?id={$data_fetch['user_id']}\" class=\"search\">";
    echo "<img width=40px height= 40px src=\"data/photos/{$data_fetch['user_id']}/_default.jpg\" class=\"boxgridsearch\"/> "; 
     echo substr($data_fetch[$db_tb_atr_name], 0,160);
    echo "</a></div>";

}
echo "<div class=\"morebutton-search\"><a href=\"echo '%".$query."%'\">+ view more results</a></div>";




mysql_close();
}

?>

p.s 如果有人知道我如何创建一个超链接将用户带到一个新页面,在新窗口中列出他们当前的搜索查询,但显然这次显示超过 5 个并显示该搜索的所有结果,我会真的太棒了。

我已经尝试过这个,但它很可能完全错误,因为它不起作用:

echo "<div class=\"morebutton-search\"><a href=\"echo '%".$query."%'\">+ view more results</a>

最佳答案

您正在做的是交叉连接。其中,配置文件表、统计表和用户表中的所有行都合并到一张包含所有各种组合的表中。因此,您会多次获得同一用户。

您需要的是“内部联接”或表之间的某种连接来缩小选择范围。

如果您确实需要“交叉连接”,请按照 MAXIM 的建议使用 DISTINCT 关键字。

上述建议的链接:http://www.tizag.com/mysqlTutorial/mysqljoins.php

关于php - 搜索框Where子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808035/

相关文章:

python - sqlalchemy ZopeTransactionExtension 中的查询结果错误

php - 如何使用数据库服务器访问本地主机?

php - 我的 php echo row ['Date' ] 不知怎的就消失了

php - Magento 购物车总计汇总

php - 如何在 Javascript if 条件下触发 php 代码

mysql - NamedParameterJdbcTemplate.update 如何真正与 Spring 和 MySQL 一起工作

php - 在同一值内保护真正的转义字符串安全吗?

php - 有没有办法从查询字符串中获取值 [product_code]1INSAZE 并使用它来运行 sql 查询

javascript - 无需 Javascript 自动运行 POST 表单

php - 大海捞针,针是针的阵列