Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL交叉引用表联接_Mysql_Search_Join - Fatal编程技术网

MySQL交叉引用表联接

MySQL交叉引用表联接,mysql,search,join,Mysql,Search,Join,我对sql非常陌生,搜索论坛没有给我正确的答案,所以我换了一个新的。我有三张桌子: 产品 产品标识 产品描述 关键词 关键字\u id 关键词描述 以及一个参考表,其中包含了以下关键字\u至\u产品: 参考号 关键字\u id->与关键字表相关 产品标识->与产品表相关 我想问两个问题: 一个给所有产品匹配一个或多个特定的关键字我想我已经有了这个 ie:所有具有“螺栓”或“螺钉”关键字的产品 一个给所有产品匹配多个关键字,这是一个我没有得到。。。 ie:所有具有“螺栓”和“螺母”关键字的产品 虽

我对sql非常陌生,搜索论坛没有给我正确的答案,所以我换了一个新的。我有三张桌子:

产品

产品标识 产品描述 关键词

关键字\u id 关键词描述 以及一个参考表,其中包含了以下关键字\u至\u产品:

参考号 关键字\u id->与关键字表相关 产品标识->与产品表相关 我想问两个问题:

一个给所有产品匹配一个或多个特定的关键字我想我已经有了这个 ie:所有具有“螺栓”或“螺钉”关键字的产品 一个给所有产品匹配多个关键字,这是一个我没有得到。。。 ie:所有具有“螺栓”和“螺母”关键字的产品 虽然我认为这不是最令人兴奋的事情,但我就是想不出来

此外,我想知道我是否做了正确的事情

我正在写一份申请书,上面有appr。其中有1.000.000种不同的产品,带有商品编号和说明。我将描述中的重要单词添加到关键字数据库中,还添加了其他关键字,如EAN number或等效productnumber,这些关键字不在产品表中。 这些都是通过关键字连接到product表的

每个关键字,例如EAN编号,都可以引用多个产品

其思想是只搜索关键字_to_product_表,而不是搜索产品表中的多个字段。好主意

提前感谢您的回复

你好,阿诺·维克利这是你想要的吗

select distinct p.Id, p.Description
from Product p 
join ProductKeyword pk
  on p.id = pk.ProductId
join Keyword k
  on k.id = pk.KeyWordId
  and k.description in ("Red", "Yellow")

直接在主表中搜索,比如在description列中,您将看到一个类似这样的where

WHERE 
  description like "%bolt%"
and description like "%nut%"
现在使用关键字表product_id,keyword,我可以建议

SELECT
  DISTINCT(p.*)
FROM Product p
JOIN ProductKeyword pk1
ON p.id = pk1.productId
JOIN ProductKeyword pk2
ON p.id = pk2.productId
WHERE
  pk1.keyword = "bolt"
AND
  pk2.keyword = "nut"

是的,关键字到产品表听起来是个好主意。您可以在关键字上使用索引,当“like”操作符会减慢一个大表上的许多查询时,它将使您的查询保持快速。

首先,非常感谢您的回答

两种答案中的一点似乎都起到了关键作用;顺便说一句,感谢这个非常有用的试错工具,虽然它不是很快;o

SELECT distinct p.id, p.descriptionFROM Product p

JOIN ProductKeyword pk1
  ON p.id = pk1.ProductId

join Keyword k1
  on k1.id = pk1.KeyWordId

JOIN ProductKeyword pk2
  ON p.id = pk2.ProductId

join Keyword k2
  on k2.id = pk2.KeyWordId

WHERE
 k1.description = "Yellow"
AND
 k2.description = "Red"
id和关键字上有索引。说明这是最快的方法吗??如果我会使用两个以上的关键词呢??只需添加更多连接,它在哪里


你好,阿诺

你好,谢谢你的回复。这适用于第一个“或”选项,但不适用于“和”选项。在这种情况下,结果应该只包含foo,foo的关键字既有“red”也有“yellow”。是的,更多的连接,方法在哪里。同样,有了正确的索引,速度也很快。