您好我有以下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"
答案 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)."')