php - 按序列化值搜索

标签 php mysql

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

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

最佳答案

解决方案

要获取存储在 settings 表中的所有 products 的详细信息(逗号分隔),您可以使用 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

关于php - 按序列化值搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000391/

相关文章:

php GD 创建透明png图片

php - 从其他页面获取内容并使用 URL 参数

php - 将下一个和上一个按钮制作成箭头

mysql - 如何借助主键从整个数据库获取特定列

使用 ORDER BY 子句时的 Mysql SLOW UNION 查询

php - 避免在 Woocommerce 中结账混合延期交货和正常商品

javascript - 需要将 PHP 正则表达式转换为 JavaScript 正则表达式

mysql - rs.getMetaData().getColumnName(i) 与 mysql 上的别名列

c# - 如何将 EntityFramework 中的内联查询结果转换为实体

php - 如何选择记录并显示文本以及 COUNT?