Примечание : Если вы ищете решение своей проблемы и вас привлекли, это, вероятно, вам не поможет.Если вы не анализируете один SQL-запрос на наличие ошибки, а на самом деле ошибка может существовать в запросе, который следует , этот вопрос, без вашего ведома, может вам не помочь.Я просто предупреждаю вас сейчас, потому что ни одна из данных, приведенных в этом вопросе, на самом деле не приводит к ответу.
Чтобы расширить таблицу базы данных regular_rules
без изменения самой таблицы, я создал дополнительную таблицу (extended_rules
), ПК которой также является FK до regular_rules
.Затем я могу поместить любые новые столбцы в extended_rules
, и каждый раз, когда я загружаю из него запись, мне просто нужно присоединить ее к regular_rules
, чтобы обработать ее, как будто это полный объект.Таким образом, как вы можете видеть, эти две таблицы имеют отношение один-к-одному.
Однако regular_rules
также имеет отношение один-ко-многим с другой таблицей (rule_coupons
), которая такженеобходимо объединить.
Таким образом, у меня есть следующий запрос:
SELECT `main_table`.*, `primary_coupon`.`code`, `regular_rules`.*
FROM `extended_rules` AS `main_table`
LEFT JOIN `rule_coupons` AS `primary_coupon`
ON main_table.rule_id = primary_coupon.rule_id AND primary_coupon.is_primary = 1
LEFT JOIN `regular_rules`
ON `main_table`.`rule_id` = `regular_rules`.`rule_id`
Это выглядит прекрасно для меня.Однако я получаю следующее сообщение об ошибке:
SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'main_table.rule_id' in 'в предложении'
ThroughВ ходе тестирования я обнаружил, что эта ошибка возникает при втором соединении, несмотря на то, что я успешно получил main_table.rule_id
всего за несколько минут до того же запроса.Интересно, что если я поменяю местами два соединения, ошибка все равно произойдет во втором, что заставляет меня поверить, что это может быть не логическая ошибка, а скорее синтаксическая ошибка, относящаяся к чему-то, чего я просто пока не понимаю.
Обратите внимание, что я не могу позволить себе роскошь изменять первое соединение (на rule_coupons
), и что я могу изменить только второе соединение (на regular_rules
) или добавить новые детали в запрос.
Редактировать: Интересная разработка ... Если я вставлю запрос в phpMyAdmin и выполню его там, он будет работать нормально.Я также собрал быстрый базовый PHP-скрипт для выполнения запроса с использованием mysqli, и это сработало нормально.Пока что, похоже, это происходит только в рамках платформы, на которой я строю ( Magento ).Я работал с Magento в течение долгого времени, и я никогда не сталкивался с такой странной проблемой с базой данных, как это раньше ... Поэтому я все еще не уверен, что не так, но, по крайней мере, теперь у вас есть немного больше контекста.