检查id存在于数组存储数据中

时间:2014-12-18 05:11:44

标签: php mysql

这是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,查询仍未显示任何结果:(

3 个答案:

答案 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

所以结论是上面的查询不起作用。您必须使用带有字符串列

的整数列和字符串列连接整数列