繁体   English   中英

mysql子查询有多个结果错误

[英]mysql subquery with multiple results error

我已经搜索了这个问题的解决方案,有些已经接近但似乎无法找到解决方案。 我有一个包含各种信息的“运行”表,一列是关于它适用的公司的信息。 我还有一个公司表,存储公司的所有信息。 在运行表的公司列中,公司由公司表中的“索引器”标识。

现在我有一个搜索,您可以在其中搜索有关运行的任何信息,以查找包含搜索短语的任意数量的记录,包括公司。 作为运行表的公司列只有标识符号即。 34,23,5等我还需要检查公司表名称栏中的匹配项。

这是我的查询,如果只有一家公司匹配搜索结果,它可以正常工作。 我需要退回所有匹配的公司。

$sql_results = "SELECT * FROM runs WHERE name LIKE '%$searchname%' OR company = (SELECT indexer FROM companies WHERE name LIKE '%$searchname%' ) OR feild LIKE '%$searchname%' ORDER BY date_due";

    while($result_results = @mysql_fetch_array($query_results))
    {
    $resultnm_array[]=$result_results['name'];
    $cmp_id = $result_results['company'];
        $sql2 = "SELECT name FROM companies WHERE indexer = '$cmp_id' LIMIT 1";
        $query2 = @mysql_query($sql2);
        $result2 = @mysql_fetch_array($query2);
        $resultcpy_array[]=$result2['name'];
    $resultfld_array[]=$result_results['feild'];
    $resultdt_array[]=$result_results['date_due'];
    $resultid_array[]=$result_results['indexer'];
    }

我正在将结果输入到数组中并使用TBS模板引擎来创建结果表等。我是一个新手,所以任何帮助将不胜感激。 从我收集的内容中我需要使用join。 但我似乎无法让它工作......

你能不能只使用IN

SELECT * 
FROM runs 
WHERE name LIKE '%$searchname%' 
    OR company IN (
        SELECT indexer 
        FROM companies 
        WHERE name LIKE '%$searchname%' ) 
    OR feild LIKE '%$searchname%' 
ORDER BY date_due

鉴于您的意见:“如果只有一家公司匹配搜索结果,则工作正常” - 这使我相信如果多家公司符合搜索条件,则查询因=失败。


鉴于您的编辑,您可以使用JOIN使这更简单,并且您不再需要循环中的其他select语句:

SELECT r.*, c.name
FROM runs r
    JOIN companies c on r.company = c.indexer
WHERE r.name LIKE '%$searchname%' 
    OR r.feild LIKE '%$searchname%' 
ORDER BY r.date_due

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM