首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MYSQL中,是否可以选择将在WHERE子句中定义的内容?

在MYSQL中,是否可以选择将在WHERE子句中定义的内容?
EN

Stack Overflow用户
提问于 2019-05-30 07:15:37
回答 1查看 56关注 0票数 1

我有一个系统,其中包含的每个项目都可能属于多个父级。我需要能够检索一个项目的所有子项,它是子项的子项。真让人恶心。好的,这里有5个级别。

每个项目都有(或者应该有)一个名为"belongs_to_json“的json列(还有更多的列,比如"id”和诸如此类的东西),其中包含每个父订单组合。例如{"parent":2,"order":4},{"parent":13,"order":1}

我可以通过组合PHP和MYSQL来搜索这个以及具有相同父对象的其他对象(在之前的stackoverflow中找到了这个想法)

首先,我运行一个查询(codeigniter框架),获取一些项目父项,并将查询放入一个$qry_classes变量中。

代码语言:javascript
复制
    $sql_classes = "SELECT t.id 
    FROM table t 
    WHERE JSON_SEARCH(t.belongs_to_json, 'all', '2') LIKE '%.parent%';";
    $qry_classes = $this->db->query($sql_classes);

然后,我使用该查询的结果编写一个新的WHERE语句。

代码语言:javascript
复制
    $s_rewrite_array = array_map(function($row) {
    return "JSON_SEARCH(t.belongs_to_json, 'all', '{$row->id}') LIKE '%.parent%'";
    }, $qry_classes->return_array() );
    $sections_condition = implode(" OR ", $s_rewrite_array);
    $sql_sections = "
        SELECT  t.id
        FROM    table t
        WHERE   ($sections_condition)
    ";
    $qry_sections = $this->db->query($sql_sections);

当我有一个具有多个父项的项,并且我想在SELECT子句中返回WHERE子句中使用的父项时,问题就来了。

就像这样

代码语言:javascript
复制
    SELECT t.*, non_existant_column FROM table t WHERE 
    JSON_SEARCH(t.belongs_to_json, 'all', '{$row->id}' as non_existant_column) LIKE '%.parent%;

显然不是真正的东西,但我希望有一个等效的东西。或者用不同的方式来解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 07:53:10

您可以只使用在SELECT列表中放入一个文字,您不需要从WHERE子句中获取它。

代码语言:javascript
复制
SELECT t.*, '{$row->id}' AS parent 
FROM table t 
WHERE JSON_SEARCH(t.belongs_to_json, 'all', '{$row->id}') LIKE '%.parent%;

如果您使用的是MySQL 8.0,那么您可能可以使用JSON_TABLE而不是您的方法来查找parent: 2。请参阅MySQL Return JSON array index based on property value

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56369683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档