sql - Doctrine ORM - 自连接,没有任何实际关系

标签 sql mysql symfony1 doctrine dql

我正在尝试通过匹配对象标签来查找与一个对象相关的对象。我构建了一个 mysql 查询,它将通过计算匹配标签来返回最匹配的对象。

我是 Doctrine (1.2) 的新手,所以我想知道是否有人可以帮助我走上正确的轨道,修改我的架构并创建 DQL 查询?我猜最大的问题是这两个标记集在我的 schema.yml 中并不相互关联。

架构.yml:

Object:
  columns:
    name:
  relations:
    Tags: { foreignAlias: Objects, class: Tag, refClass: Tagset}

Tagset:
  columns:
    object_id: {type: integer, primary: true, notnull: true}
    tag_id: { type: integer, primary: true, notnull: true }
  relations:
    Object: { foreignAlias: Tagsets }
    Tag: { foreignAlias: Tagsets }

Tag:
  columns:
    name: { type: string(255), notnull: true }
    Object: { foreignAlias: Tags, class: Object, refClass: Tagset}

这里是使用上面的架构的 mysql 查询:

SELECT object.name, COUNT(*) AS tag_count
FROM tagset T1
INNER JOIN tagset T2
    ON T1.tag_id = T2.tag_id AND T1.object_id != T2.object_id
INNER JOIN object
    ON T2.object_id = object.id
WHERE T1.object_id = 2
GROUP BY T2.object_id
ORDER BY COUNT(*) DESC

最佳答案

您也可以使用子查询。像这样的事情:

$object_id = 2;

Doctrine::getTable('Tagset')->createQuery('t')
  ->select('t.tag_id, o.id, o.name, COUNT(t.tag_id) AS tag_count')
  ->innerJoin('t.Object o WITH o.id != ?', $object_id)
  ->where('t.tag_id IN (SELECT t.tag_id FROM Tagset t WHERE t.object_id = ?)', $object_id)
  ->groupBy('t.object_id')

关于sql - Doctrine ORM - 自连接,没有任何实际关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145940/

相关文章:

在 Symfony 1 中 PHP 警告 "Warning: ob_start(): function ' '未找到或无效的函数名称?

php - PHP 5.2.10 和 MySQL 5.0.81 损坏的 UTF-8 字符

MySQL每日得分随全局排名变化

php - 更改查询变量,然后再次执行

Mysql:测试获取没有匹配项

PHP 安全困境

sql - 从 EC2 迁移到 RDS 后,Postgresql 查询速度降低 10 倍

Mysql "select * from"没有返回所有行

python - 在 Flask 应用程序中使用 sql 脚本

php - Symfony 框架的最佳论坛插件解决方案是什么?