【问题标题】:Wrong output with search function SQL搜索功能 SQL 输出错误
【发布时间】:2015-04-22 10:31:10
【问题描述】:

我尝试将元数据标签连接到用户,我得到了它们之间的关系,但是当我搜索标签时,我得到了一个很大的输出。我有一个名为 Chips 的标签,但输出的是 17 个不同的用户。它们都与单词或标签无关。

澄清我正在尝试做的事情: 我正在制作一个可以搜索用户名、座右铭和标签的搜索功能。 http://gyazo.com/d334447761152394ca1eecc392c35e92

<?php

    $varr = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($url)); 
    $varr = html_entity_decode($url,null,'UTF-8');

    $query = $_GET['query']; 
    $min_length = 2;

    if(strlen($query) >= $min_length){ 

    $query = htmlspecialchars($query); 
    $query = mysql_real_escape_string($query);

    $raw_results = mysql_query("SELECT * FROM users, user_tags
                WHERE (`username` LIKE '%".$query."%') OR (`tag` LIKE '%".$query."%') OR (`motto` LIKE '%".$query."%')") or die(mysql_error());
    $num_rows = mysql_num_rows($raw_results);
?>

【问题讨论】:

  • 必须有一个匹配的词Chips 这就是返回结果的原因:P
  • 它们之间是什么关系?
  • 他们因为 user_id 而建立了连接。我认为如果单词不匹配,它不会返回任何内容。它应该只匹配标签,因为没有一个用户以他们的名字命名为 ch、chi、chip、chips。
  • 请注意 mysql_ 函数现在不再被劝阻(就像过去几年一样),而是正式的deprecated。你真的应该使用MySQLiPDO,因为这段代码很快就会停止工作。请参阅Why shouldn't I use mysql_* functions in PHP? 了解更多信息。

标签: php sql string output


【解决方案1】:

这是您的查询:

SELECT *
FROM users, user_tags
WHERE . . .

问题与您的WHERE 子句无关。它是FROM 中的逗号。简单规则:从不FROM 子句中使用逗号。 总是使用明确的JOIN 语法。

正确的语法看起来更像这样(但取决于您的列名):

SELECT *
FROM users u JOIN
     user_tags ut
     ON u.userId = ut.userId
WHERE . . .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2022-11-29
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多