如何分解数据库中的值并在选择查询中使用它?

Posted

技术标签:

【中文标题】如何分解数据库中的值并在选择查询中使用它?【英文标题】:How can i explode a value in database and use it in select query? 【发布时间】:2018-11-01 14:59:08 【问题描述】:

所以,我的博客中有一个用于输入类别的复选框,其中类别值可以是多个。我使用 implode 函数将它们插入数据库。现在,如果我使用以下查询,我希望我的博客按类别过滤,它只会获取类别 ID 为单一的位置。我如何获取类别 ID 具有多个值的数据。它应该在它检查的每个类别中都可见。

public function getPublishedBlogInfoByCategory($id)
    $sql = "SELECT * FROM blogs WHERE category_id = '$id' ORDER BY id DESC";
    if(mysqli_query(Database::dbConnection(), $sql))
        $queryResult = mysqli_query(Database::dbConnection(), $sql);
        return $queryResult;
    else
        die('Query problem'.mysqli_error(Database::dbConnection()));
    

我正在调用该函数

<?php
require_once 'vendor/autoload.php';
$blog = new App\classes\Blog;
$app = new App\classes\Application;

$queryResultCategory = $blog->getAllPublishedCategory();

$id = $_GET['id'];
$queryResult = $app->getPublishedBlogInfoByCategory($id);
$queryResultCategoryName = $app->getBlogCategoryName($id);
$categoryName = mysqli_fetch_assoc($queryResultCategoryName);

$queryResultEvent = $app->getLimitedPublishedEvent();

?>

【问题讨论】:

这将是一个放置数据透视表的好地方:有一个名为 blogs_categories 的表,其中包含 blog_id 和 category_id。 我有一个名为 blog_categories 的表,复选框 (category_id) 的值来自该表 【参考方案1】:

我同意 aynber 的观点,即数据透视表可能比将多个类别 ID 连接在一起的字符串列更适合您的需求。但是,要回答你的问题,而不是

= '$id'

仅当整个字段与整个 $id 匹配时才匹配,您可能只需要使用

LIKE '%$id%'

将 % 视为通配符以匹配 $id 之前或之后的任意数量的字符

编辑:

CREATE TABLE `blog_category_pivot` (
    `blog_id` INT(11) UNSIGNED NOT NULL,
    `category_id` INT(11) UNSIGNED NOT NULL,
    PRIMARY KEY (`blog_id`, `category_id`),
    CONSTRAINT `blog_fk` FOREIGN KEY (`blog_id`) REFERENCES `blogs` (`id`),
    CONSTRAINT `category_fk` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)
);

然后要使用数据,您只需从博客中进行选择并加入 blog_category_pivot 表以检查它是否具有给定的类别。如果你想列出你已经有一个 id 的博客的类别,你可以从加入 blog_category_pivot 表中 blog_id = $blog_id 和 category_id = categories.id 的类别中选择名称

【讨论】:

嘿,谢谢,成功了。真的很感激这个:) 不客气!很高兴它有帮助。虽然如果可能的话,我还是会再次推荐使用数据透视表。 (编辑添加了一些解释,因为我意识到我的答案相当简单):) 其实我对数据透视表没有太多了解。你能给我任何链接或我可以了解的东西吗? 我进行了搜索以找到一个好的教程,但一切似乎都是关于在现有表中旋转数据,所以我将在我的答案中添加一些关于如何做到这一点的信息。

以上是关于如何分解数据库中的值并在选择查询中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 如何获取 XML 数据列的值并在 where 子句中使用它

如何使用 Bootstrap Multiselect 获取所有选定的值并在 AJAX 中使用它

如何在一个 SQL 查询中检索值并在存储过程中使用它?

我如何更改.properties文件中的值并在jenkins中使用此命令运行构建

选择包含所有提到的值并排除多对多关系中的重复项的名称

如何遍历 2 个文件中的行,比较值并在满足条件时更新文件中的值?