这是我用来从数据库中获取数据的查询
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';
为什么此查询产生双重结果?
我想自动搜索存储在数据库中的多个值(id),而不是手动添加AND product.product_id='?'
部分。值以序列化形式存储。
类似
... AND product.product_id in (setting.value WHERE key='featured');
我知道查询不正确,只是试着展示我想要的东西。
表'设置':
value | key
-------------------
23,43,28 | featured
答案 0 :(得分:1)
这在某种程度上破坏了关系范式,你应该有三个值为23,43和28的条目。
然后我再次猜测字段value
是一个varchar(你知道“value”和“key”是mysql的保留字吗?)所以你可能想查看字符串里面找到模式“, 23,“在场内。类似于:WHERE CONCAT(',', field_value, ',') LIKE "%,23,%"
答案 1 :(得分: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' ) );
注意:您看到重复条目的原因可能是因为特定产品有多个描述,您可以使用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