Почему это довольно простое соединение не работает? - PullRequest
1 голос
/ 08 июня 2011

Я использую этот запрос для извлечения всех задач с определенным тегом в отношении HABTM. Однако по какой-то причине он не может прикрепить соответствующие теги к tags_tasks и, следовательно, возвращает 0, потому что не может ничего подобрать из таблицы тегов.

SELECT `Task` . * , `Task`.`id`
FROM `tasks` AS `Task`
LEFT JOIN `tags_tasks` AS `TagsTask` ON ( `TagsTask`.`task_id` = `Task`.`id` )
LEFT JOIN `tags` AS `FilterTag` ON ( `FilterTag`.`id` = 'TagsTask.tag_id' )
WHERE `Task`.`assigned_id` = '4de50bef-bbc8-404d-9f46-2a

Когда я удаляю предложение WHERE, он возвращает все задачи, но с пустыми записями для полей тегов.

Проблема была в том, что CakePHP создал недопустимое соединение с кавычками, а не с обратными галочками. Спасибо за указание на это, и я буду исследовать глубже.

Ответы [ 3 ]

2 голосов
/ 08 июня 2011
SELECT *
FROM `tasks`
LEFT JOIN `tags_tasks` ON ( `tags_tasks`.`task_id` = `tasks`.`id` )
LEFT JOIN `tags` ON ( `tags`.`id` = `tags_tasks`.`tag_id` )
WHERE `tags`.`name` = 'Problem'

Вы использовали строку в строке 3, которая не могла работать.

1 голос
/ 08 июня 2011

tags_tasks.tag_id принимается за значение, потому что оно между кавычками.

1 голос
/ 08 июня 2011

Подсветка кода действительно помогает в том случае, если правая часть второго объединения заключена в неправильные скобки, то вместо кавычек (') должны быть кавычки (`)

...