想要从具有多个值的列查看ID

时间:2017-07-12 22:13:37

标签: php mysql

我的表包含"类别"包含多个值的列,以","分隔。

示例:

  

user_ID ---" 1" | 类别---"视频,音频,游戏"

     

user_ID ---" 2" | 类别---"音频,写作"

     

user_ID ---" 3" | 类别---"视频,游戏"

现在我通过以下方式爆炸类别列:

$data = explode(',', $get_category_section);

所以我得到阵列..

现在我想查看每个类别的ID

示例

  

类别音频将显示user_id" 1"和" 2"

     

类别视频将显示user_id" 1"和" 3"

等等

这是我的代码 - 我知道它错过了很多:

    if (isset($_GET['category']) === true and empty($_GET['category']) === false) {
        $get_category = $_GET['category'];
        global $connect;
        $query = "SELECT category FROM `users`";
        $result = mysqli_query($connect, $query) or die('erreor');
        while ($row = mysqli_fetch_array($result)) {
        $get_category_section = $row['category'];


    $data = explode(',', $get_category_section);
    $category_array = in_array($get_category, $data);

    echo //

     }

    }

我的网址是:http://localhost/site/get_categories.php?category=video

我希望此页面显示1和3

由于

1 个答案:

答案 0 :(得分:2)

当然,即使有66个类别(它们并不多),你也应该去规范化或重构你的数据库设计。为类别创建一个单独的表,并创建另一个表来存储user_id和category_id。

如果您仍想继续使用相同的结构,请使用现有架构的可能解决方案。

解决方案1:

$param = "%{$_GET['category']}%";
$stmt = $db->prepare("SELECT user_id, category FROM users");
$stmt->execute();
$result = $stmt->get_result();

while ($myrow = $result->fetch_assoc()) {
    unset($caregories);
    $categories = explode(",", $myrow['category']);
    if(in_array($param, $categories)) {
            $user_id[] = $myrow['user_id'];
        }
   }

请对查询进行解释,例如'可能很慢

解决方案2:

{{1}}

user_ids将在数组user_id中。请注意,随着表中记录数量的增加,这将变慢。