【问题标题】:How to query a text column contains an array ["val1", "val2"] and retrieves all of the table that contains a specific value如何查询包含数组 ["val1", "val2"] 的文本列并检索包含特定值的所有表
【发布时间】:2021-04-24 12:55:35
【问题描述】:

我的SQL逻辑有问题,我必须检查数据库中的数组类别的值是否与数值匹配以检索所有匹配的元素,需要帮助

在我的表格产品中,我保存了像 varchar 这样的类别列:

这是我的请求函数:

function getCategoryTrendingProduct($categoryId, $skip, $limit)
{

    $sql    = "SELECT id as product_id, name as product_name, price as product_price, image as product_image, rating as product_rating, review as product_review FROM products WHERE JSON_EXTRACT(category, '$.?') = ?  ORDER BY product_sale DESC LIMIT ?, ?";

    $query  = $this->db->query($sql, array($categoryId, $skip, $limit));
    $rs     = $query->result_array();
    
    return $rs;
}

我想提取类别列并验证它是否包含 categoryId.. 帮忙!

【问题讨论】:

  • (1) 用您正在使用的数据库标记您的问题。 (2) 表格格式的样本数据会有所帮助。
  • 如果categoryId 为 11,则返回第 4 行,如果为 6,则返回第 1 行,如果 $categoryId 为 1,则返回除第一行之外的所有行,对吗?
  • 不,因为我有一个产品表,我想检索所有指定类别的产品,如果我一开始没有解释清楚,对不起
  • SQL Server 抱歉

标签: sql sql-server database


【解决方案1】:

您可以用逗号分隔每个值,然后将其用于类别验证。 拆分示例;

SELECT TRIM(TMP.value) AS SplittedDate
FROM (
    SELECT '1, 2, 3, 4, 5' AS col
    ) a
CROSS APPLY string_split(col, ',') AS TMP

【讨论】:

  • 感谢您的回答,我找到了一个非正统但实用的替代方法,它使用简单的 LIKE,但它使用双引号 WHERE 类别 LIKE '%"1"% 搜索元素,因为该值在每一行。但我不知道这是否会影响性能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2016-02-04
相关资源
最近更新 更多