使用MySQL PHP基于另一个查询运行查询

3
以下代码搜索我的mysql数据库,并返回邮政编码(如IG6、RM11、RM8、RM4、RM2、RM6、RM7、RM1、RM5)和距离,使用存储过程。(一切正常)
问题:有了这些结果,我想在同一数据库中搜索另一个可能包含这些邮政编码的工作信息表(可能使用LIKE)。
最好的方法是什么?我尝试了很多例子(implodearrays等)。一个数据库连接正确吗?我如何查询变量,因为它确实会返回2列,邮政编码和距离。我应该将其拆分成数组(如何拆分?)
最终产品:HGV司机RM5,清洁工RM5,教师RM5
SELECT title FROM jobinfo WHERE location IN来自其他查询的结果);
 <?php
    include ("conn.php");
    $first="RM5";

    $result = mysql_query("select outcode, GetDistance(Lat, Lon, (SELECT Lat from postcodes where outcode = '$first' limit 1),(SELECT Lon from postcodes where outcode = '$first' limit 1)) as Distance from postcodes having Distance < 3 order by Distance DESC;");
    while($row = mysql_fetch_array($result))
    {
        echo  ($row['outcode']) ;
    } 
    // This returns postcodes

    $resultb = mysql_query("SELECT title FROM jobinfo WHERE location IN ($results[outcode]) ");
    while($row = mysql_fetch_array($resultb))
    {
        echo  ($row['title']) ;
    }
    mysql_close($con);
?> 

请帮忙……任何关于连接表的引用都需要全面的解释,因为目前为止没有一个能够帮上忙的!

2个回答

1

首先将输出准备好:

在第一个while循环中:

while($row = mysql_fetch_array($result))
 {
    $array[] = $row['outcode'] ;
 } 

然后为IN子句准备数组:

foreach ($array as $a) {$clause.= "'$a',";}
$clause=substr($clause,0,-1)

最后使用IN语句的子句:

$resultb = mysql_query("SELECT title FROM jobinfo WHERE location IN ($clause) "

===== 编辑 === LIKE 语句

对于 like.. 你需要多个 like 语句 OR 在一起.. 使用 SQL LIKE 和 IN 结合

将 prepare 子句代码更改为:

foreach ($array as $a) {$clause.= " location LIKE '%$a%' OR";}
$clause=substr($clause,0,-3)

而 SQL 语句变成了:

$resultb = mysql_query("SELECT title FROM jobinfo WHERE $clause ");

当然,您会想要添加更多的错误检查...考虑可能的注入。


这个可以用,太好了,但它只能找到完全匹配的内容,例如'RM5',而不能找到'Driver RM5'这个字段中的内容。如何扩展您的优秀代码以解决这个问题...我确信%的位置需要在某处加上? - Mikeys4u

0

你能否解释一下如何在预处理语句中实现动态语句的问题?我总是在需要动态语句的情况下遇到预处理语句的问题,就像这个例子一样。 - Moe Tsao
首先,您需要切换数据库对象,以便使用PDO而不是mysql_*函数(mysql_*函数已被弃用)。这是PDO文档http://php.net/manual/en/ref.pdo-mysql.php。然后只需按照我发布的第二个链接中第一个答案的示例进行操作。使用命名参数,然后将变量设置为参数。 - solidau
1
哦,我想我明白你的意思了。首先将SQL语句构建为字符串,使用:var符号表示法而不是插入变量,然后使用数组语法将变量绑定到命名符号,就像我发布的示例中那样。 - solidau
啊..原来如此,非常感谢!下次我会尝试的! - Moe Tsao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接