2012-02-29 133 views
-2

我想我在opencart中发现了一个bug,所以在精选模块中有一个自动完成框提示产品,但它似乎跳过了一大堆。在检查代码后,它看起来像这一切都归结到这个数据库查询:mysql喜欢的问题

SELECT * 
FROM calcproduct p 
LEFT JOIN calcproduct_description pd ON (p.product_id = pd.product_id) 
WHERE pd.language_id = '1' AND LCASE(pd.name) LIKE 'ti %' 
GROUP BY p.product_id 
ORDER BY pd.name ASC LIMIT 0,20 

当我手动运行查询,比如我有两个产品:

TI | 83 | Brand New 
TI | 83 | Like New 

,只找到其中​​之一,它也在为其他产品做这件事。有没有人有任何线索为什么发生这种情况?

它必须是查询中的相似部分,我从中取出了组,并且甚至是第一个where子句。我尝试将列从utf_8更改为latin_1

enter image description here

enter image description here

enter image description here

+2

您查询查找ti'后'空白。其中一行没有空白吗? 'LIKE'ti%''应该是'LIKE'ti%''? – 2012-02-29 16:57:14

+0

如果您删除了“group by”子句,我的下一个建议是确保calcproduct记录和calcproduct_description记录均存在。即使您使用的是左连接,您的“where”子句也会包含对“pd.name”和pd.language的值的引用,因此每个表的记录都必须存在。 – aingram 2012-02-29 17:00:31

+0

如果我喜欢'%',那么他们都显示出来,所以我不认为这是因为它是与类似的条款具体相关的东西,我相信 – DevTeamExpress 2012-02-29 17:34:23

回答

0

我弄明白了。在这些产品的名称前面的空间没有显示出来

2

如果83是p.product_id场,那么你就永远只能得到那些两行之一。任何分组的字段(其中两行或更多行具有相同的值)将折叠成单行。

+0

它的'不是他们每个人都有独特的产品ID – DevTeamExpress 2012-02-29 17:31:54