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

时间:2018-05-22 18:43:38

标签: php database laravel mysqli phpmyadmin

所以,我的博客中有一个输入类别的复选框,其中类别值可以是多个。我使用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();

&GT;

1 个答案:

答案 0 :(得分:0)

我同意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_id = $ blog_id和category_id = categories.id

上加入blog_category_pivot表的类别中选择一个名称。