繁体   English   中英

在mysql中附加用逗号分隔的字符串时出现语法错误

[英]Syntax error while appending string separated by commas in mysql

我有以下查询

SELECT diamondsList.*, dealers.* FROM diamondsList JOIN dealers ON diamondsList.dealerId = dealers.id WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat AND clarity IN (SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL) AND color IN (J,H,D,E,F,G,I) AND diamondsType IN (BR,HS,CUS,RAD,AS,PRIN,OV,PS,MQ,EM)

但是我出错了

   {"error":"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FL) AND color IN (J,H,D,E,F,G,I) AND diamondsType IN (BR,HS,CUS,RAD,AS,PRIN,OV,P' at line 1"}

'FL附近有什么语法错误?

不是那个查询

SELECT diamondsList.*, dealers.* FROM diamondsList JOIN dealers ON diamondsList.dealerId = dealers.id WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat

完美地工作。

我有一个字符串“ SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL”,我该怎么做

如果您具有CSV格式的值,则需要FIND_IN_SET进行搜索。

更改:

clarity IN (SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL)

至:

find_in_set( clarity, 'SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL' )

看来,相同的问题仍然存在于查询的其他部分。
您需要在这些零件上应用相同的FIND_IN_SET

您的字符串值必须用引号引起来:

IN (SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL)

应该

IN ('SI2','VS1','SI1','VS2','VVS2','VVS1','IF','FL')

这适用于查询中的所有字符串(即检查其他IN()语句)

嗨Umer PLease使用以下查询

SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND clarity IN ("SI2","VS1","SI1","VS2","VVS2","VVS1","IF","FL") 
  AND color IN ("J","H","D","E","F","G","I") 
  AND diamondsType IN ("BR","HS","CUS","RAD","AS","PRIN","OV","PS","MQ","EM")

如果“ SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL”是单个字符串,则您无需使用IN()即可使用LIKE运算符。

SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND clarity LIKE "SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL" 
  AND color IN ("J","H","D","E","F","G","I") 
  AND diamondsType IN ("BR","HS","CUS","RAD","AS","PRIN","OV","PS","MQ","EM")

'FL附近有什么语法错误? 答案是在FL之前有IF,而IF是mySQL中的关键字。 因此,当您将用户引号引起来时,它将消除错误。

如果您有一个字符串“ SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL”,并且想要在单个元素中找到它,则使用以下查询。

SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND FIND_IN_SET(clarity,"SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL")  
  AND FIND_IN_SET(color,"J,H,D,E,F,G,I") 
  AND FIND_IN_SET(diamondsType,"BR,HS,CUS,RAD,AS,PRIN,OV,PS,MQ,EM")

如果您仍然不理解,请随时提问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM