3

下面的代码搜索我的 mysql 数据库,并使用存储过程返回邮政编码,如 IG6、RM11、RM8、RM4、RM2、RM6、RM7、RM1、RM5 和距离。(一切都好)

问题:有了这些结果,我想在同一数据库中搜索另一个表,该表可能包含这些邮政编码的工作信息(可能使用LIKE)。

让这个工作的最佳方法是什么?我尝试了很多示例(implode,arrays等) 一个与数据库的连接是否正确?如何查询变量,因为它返回 2 列,邮政编码和距离。我应该分成一个数组(如何?)

最终产品:HGV 司机 RM5,清洁工 RM5,老师 RM5

( SELECT title FROM jobinfo WHERE location IN results from other query);

 <?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);
?> 

请帮助.....任何对连接表的引用都需要完整的解释,因为到目前为止都没有帮助!

4

2 回答 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 ");

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

于 2012-09-26T22:07:39.400 回答
0

我认为您正在尝试执行类似MySQL LIKE IN() 的答案?

另外,请使用参数化查询如何防止 PHP 中的 SQL 注入?

于 2012-09-26T22:34:12.910 回答