mysql在数组中的位置

时间:2014-03-20 20:46:41

标签: php mysql sql arrays

您好我有以下mysql查询,当我尝试使用数组添加WHERE子句时,该查询会中断。我认为它的顺序正确但不确定我的符号或其他内容是否错误。我能够验证$ company_type是否有数据并且是一个数组,但是当我可以验证存在时,SQL语句不返回任何结果。

由于

"SELECT *,
         ( 6371 * acos( 
     cos(radians($lat)) * cos(radians(l.location_latitude)) * 
        cos(radians(l.location_longitude) - radians($lng)) + 
     sin(radians($lat)) * sin(radians(l.location_latitude)) 
    ) ) AS distance 
            FROM
        company c
            INNER JOIN
        bcompanytocompany bc
            ON c.company_id=bc.company_id
            INNER JOIN
        lcompany_types ct
            ON bc.company_type_id=ct.company_type_id
            INNER JOIN
        bcompanytolocations bcl
            ON c.company_id = bcl.company_id
            INNER JOIN
        address a
            ON bcl.address_id = a.address_id
            INNER JOIN
        location l
            ON a.address_location_id = l.location_id
            INNER JOIN
        postal_codes po
            ON a.address_postal_id = po.postal_id
            INNER JOIN
        cities ci
            ON po.city_id = ci.city_id
            INNER JOIN
        lprovinces pr
            ON ci.province_id = pr.province_id
        WHERE company_type_name 
            IN (".implode(',',$company_type).")
        HAVING distance < $setdistance
        ORDER BY distance
        LIMIT 30"

2 个答案:

答案 0 :(得分:1)

由于$company_type包含字符串值,如果您希望使用IN(),则需要将它们用引号括起来:

WHERE company_type_name 
        IN ('".implode("','",$company_type)."')
-- IN('string1','string2')

您还可以使用FIND_IN_SET(),这是一个包含以逗号分隔的值的字符串:

WHERE FIND_IN_SET(company_type_name, '".implode(',',$company_type)."')
-- FIND_IN_SET(company_type_name, 'string1,string2')

答案 1 :(得分:1)

由于我认为company_type_name包含字符串,因此字符串缺少'。你得到的是这样的东西:

IN (name1, name2, [...])

而不是

IN ('name1', 'name2', [...])

只需修复您的PHP implode()即可添加字符串字符:

WHERE company_type_name 
        IN ('".implode("','",$company_type)."')