如何分解数据库中的值并在选择查询中使用它?
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 中使用它