php - 带有参数数组的 SQL 请求

标签 php mysql sql symfony doctrine-orm

我的 SQL(dql) 请求有问题, 我有一个包含书籍(媒体)的表,一个包含类别的表,以及一个将两者关联的表:CategoryAffiliation(一本书可以有多个类别)

在客户端,我可以选择通过检查多个类别来搜索书籍。然后客户端向服务器发送一系列类别,并且他必须返回至少具有其中一个类别的书籍。

$books = [];
if (isset($data['categories'])) {
    foreach ($data['categories'] as $key => $value){
        $query = $em->createQuery("SELECT m
                                   FROM AppBundle:Media m, AppBundle:Category c, AppBundle:CategoryAffiliation mc
                                   WHERE m.idMedia = mc.idMedia
                                   AND mc.idCategory = :key
                                   GROUP by m.idMedia"
        )->setParameter('key',$key);
        $result = $query->getResult();
        foreach ($result as $book) {
            array_push($books, $book);
        }
    }
}

这是我现在的解决方案,但这不太好,我无法按结果排序.. 我收到一组重复的书籍,然后在客户端合并它们以删除重复的书籍。

我正在寻找一种方法,可以通过一个请求一次性获取所有数据

谢谢

最佳答案

我无法访问我的东西来测试它,但这可以做到。我只是不确定 setParameter 将如何处理我将 ' 放入字符串中的事实。我认为您需要获取原始信息。我不记得 symfony 和原则是如何做到这一点的,太久了;)

如果你找不到其他方法,你可以直接在字符串中构建它......我真的不推荐。

$query = $em->createQuery("SELECT m
                           FROM AppBundle:Media m, AppBundle:Category c, AppBundle:CategoryAffiliation mc
                           WHERE m.idMedia = mc.idMedia
                                 AND mc.idCategory IN (:key)
                           GROUP by m.idMedia"
        )->setParameter('key',implode("','",array_keys($data['categories'])));

关于php - 带有参数数组的 SQL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44659441/

相关文章:

sql - 需要有关 SQL 查询的帮助

php - 如果每次循环后提交语句都没有通过

php - 需要从 mysql 返回一行

php - 让我的网站更安全,我使用的 password_hash 是否正确?

php - 如何在 Laravel 5.3 中使用 Facebook 身份验证

php - 输入类型的文件不起作用:ajax到php

mysql - 在 Mysql 中使用 select 语句进行更新

php - 当新人在表单上注册时创建文件夹

mysql - 仅当一个字段不存在于另一个表中时,如何列出表中的记录?

php - 拆分两个不同数据库表中的多行