1

这是我用于从数据库中获取数据的查询

SELECT
    product_description.name as name, 
    product.image as iurl
FROM
    product_description, product
WHERE
    product_description.product_id = product.product_id
    AND product.product_id
    AND product.product_id = '33';
  1. 为什么这个查询会产生双重结果?

  2. 我想通过存储在数据库中的多个值(id)自动搜索,而不是手动添加AND product.product_id='?'部分。值以序列化形式存储。

就像是

... AND product.product_id in (setting.value WHERE key='featured');

我知道查询不正确,只是想显示我想要的。

桌面设置':

value    | key
-------------------
23,43,28 | featured
4

2 回答 2

1

这在某种程度上打破了关系范式,您应该拥有三个值为 23、43 和 28 的条目。

然后我再次猜测字段value是一个 varchar(你知道“值”和“键”是 mysql 的保留字吗?)所以你可能想查看字符串内部以在字段中找到模式“,23”。就像是 :WHERE CONCAT(',', field_value, ',') LIKE "%,23,%"

于 2013-04-14T15:05:13.907 回答
1

解决方案

要获取products存储在settings表中的所有内容(逗号分隔)的详细信息,您可以使用FIND_IN_SET()

SELECT
    product_description.description, 
    product.name,
    product.id
FROM
    product_description, product
WHERE
    product_description.id = product.id
    AND FIND_IN_SET(product.id, ( SELECT value FROM setting where `key` = 'featured' ) );

SQLFiddle

注意:您看到重复条目的原因可能是因为特定产品有多个描述选项,您可以使用GROUP_CONCAT处理此问题 以下应该有效

结语

你的数据库设计不好,应该是这样的

product             -- All my products go here
product_details     -- Details of all the products ( A product could have multiple details)
categories          -- eg: Featured, Seasonal
product_categories  -- association of product to categories
于 2013-04-14T16:19:22.380 回答