MySQL 结果集问题

标签 mysql symfony doctrine-orm

我有一系列作者姓名,我必须选择一些作者文章,但作者姓名存在于文本内容中。有没有什么好的解决方案,我不必逐一获取记录,我可以在单个查询中获取每个作者的记录。

SELECT n0_.id AS id0 
  FROM newspaper n0_ 
       INNER JOIN newspaper_translation n1_ ON n0_.id = n1_.translatable_id
       INNER JOIN newspaper_channels n3_ ON n0_.id = n3_.news_id 
       INNER JOIN channels c2_ ON c2_.id = n3_.channel_id 
 WHERE n1_.locale = 'zh_CN' 
   AND (c2_.reference_id = '057PL' AND n1_.content LIKE '%黎子珍%') 
 ORDER BY n0_.id DESC 
 LIMIT 1 

我想传递多个作者姓名并希望获得每个作者的单个记录。但我想执行一次查询。

最佳答案

您可以使用一系列 or 语句构造 where 子句:

WHERE n1_.locale = 'zh_CN' AND c2_.reference_id = '057PL' AND
      (n1_.content LIKE '%黎子珍%' OR n1_.content LIKE '%子珍%' OR n1_.content LIKE '%黎子%')

但是,如果您对数据库有任何控制权,则应该有一个将作者与每个项目相匹配的表,每个作者和该作者所从事的项目各占一行。这称为联结表,它使回答这些类型的问题变得更加容易。

编辑:

您可以获取原始查询并使用union all重复它:

(SELECT n0_.id AS id0 
  FROM newspaper n0_ 
       INNER JOIN newspaper_translation n1_ ON n0_.id = n1_.translatable_id
       INNER JOIN newspaper_channels n3_ ON n0_.id = n3_.news_id 
       INNER JOIN channels c2_ ON c2_.id = n3_.channel_id 
 WHERE n1_.locale = 'zh_CN' 
   AND (c2_.reference_id = '057PL' AND n1_.content LIKE '%黎子珍%') 
 ORDER BY n0_.id DESC 
 LIMIT 1 )
UNION ALL
(SELECT n0_.id AS id0 
  FROM newspaper n0_ 
       INNER JOIN newspaper_translation n1_ ON n0_.id = n1_.translatable_id
       INNER JOIN newspaper_channels n3_ ON n0_.id = n3_.news_id 
       INNER JOIN channels c2_ ON c2_.id = n3_.channel_id 
 WHERE n1_.locale = 'zh_CN' 
   AND (c2_.reference_id = '057PL' AND n1_.content LIKE '%黎珍%') 
 ORDER BY n0_.id DESC 
 LIMIT 1 )

但是,此时您不妨运行单独的查询。

关于MySQL 结果集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28235291/

相关文章:

mysql - Union Select - CPU 负载过重

mysql - 处理数据库完整性

javascript - 如何在每次不触发命令的情况下检查 css 更改

doctrine-orm - 教义2 : how to remove leftJoin part of QueryBuilder

php - 深度克隆后未创建 Doctrine2 ManyToMany 记录

PHP显示join查询结果

mysql - 是否可以将List类型的数据存储到MYSQL数据库表中?

php - Symfony2 事件监听器作为服务

templates - 限制字符串 Twig

mysql - 如何在 symfony2 中配置 Doctrine?