这是THIS
的扩展问题我正在检查用户输入的id是否使用逗号运算符存储在存储数组中。
我有这样的查询
$sql="SELECT
vendor.id,
vendor.vendor_id AS VID,
vendor.name AS VNAME,
vendor.category,
vendor.website,
vendor.email,
vendor.phone,
vendor.locations,
vendor.products,
vendor.vat,
vendor.pan,
location.loc_id,
location.name AS locname,
items.iid,
items.name
FROM vendor
INNER JOIN location ON vendor.locations = location.loc_id,items
WHERE
items.iid IN (vendor.products) AND
items.iid='".$product."' AND
vendor.id=".$vendor;
这里vendor.products以1,3,5格式存储数据。并输入数据i e产品将具有单个ID。
我的查询错误,因为它确实会返回任何数据
EDITED
我在我的items表中添加了一个名为iid的列,它也是Varchar类型(字符串),现在我将这些值存储在vendor.products表中,就像这样
ITM004,ITM003,ITM005
,查询仍未显示任何结果:(
答案 0 :(得分:0)
您的SQL语法错误,也是PHP连接错误:
AND vendor.id=".$vendor.""
最后你不需要.""
,因为它是声明的最后一部分。但是,如果$vendor
是一个字符串,则需要对其进行字符串封装。
AND vendor.id='".$vendor."';
否则,如果是INT,那就是:
AND vendor.id=".$vendor;
答案 1 :(得分:0)
试一试:使用LEFT
加入而不是INNER
,并确保加入列匹配。
你不能像这样加入字符串和int:
INNER JOIN items ON vendor.products = items.item_id
错误,因为
products:1,2,3 and item_id=1
所以试着用这个:
$sql="SELECT
vendor.id,
vendor.vendor_id AS VID,
vendor.name AS VNAME,
vendor.category,
vendor.website,
vendor.email,
vendor.phone,
vendor.locations,
vendor.products,
vendor.vat,
vendor.pan,
location.loc_id,
location.name AS locname,
items.item_id,
items.name
FROM vendor
INNER JOIN location ON vendor.locations = location.loc_id,items
WHERE
items.item_id IN (vendor.products) AND
items.item_id=".$product." AND
vendor.id=".$vendor;
答案 2 :(得分:0)
从您的问题我认为您正在尝试使用字符串列(vendor.products)加入整数列(item_id),因为您提到值以coma分隔值存储。
INNER JOIN items ON vendor.products = items.item_id
所以结论是上面的查询不起作用。您必须使用带有字符串列
的整数列和字符串列连接整数列