(Исходный ответ от 10 января 2011 г.)
Я думаю, что нашел ответ: Проблема GCC: использование члена базового класса, который зависит от аргумент шаблона . Ответ не определен для gcc.
Обновление: в ответ на комментарий mmichael из проекта N3337 стандарта C ++ 11:
14.6.2 Зависимые имена [temp.dep] [...] 3 В определении шаблона класса или класса, если базовый класс зависит от параметра-шаблона, область базового класса не рассматривается во время неквалифицированных поиск имени в точке определения шаблона или члена класса или во время создания шаблона или члена класса.
blockquote>Является ли «потому что стандарт говорит так» считается ответом, я не знаю. Теперь мы можем спросить, почему стандарт указывает, что, как замечательный ответ Стив Джессоп и другие, ответ на этот последний вопрос довольно длинный и спорный. К сожалению, когда дело доходит до стандарта C ++, часто почти невозможно дать краткое и самодостаточное объяснение того, почему стандарт требует чего-то; это относится и к последнему вопросу.
Прежде всего, вы должны нормализовать свою структуру данных и иметь таблицу соединений между ключами2 и таблицей обучения.
Чтобы заставить соединение работать с текущей структурой данных, используйте mysql find_in_set () :
SELECT *
FROM education AS a
JOIN keys2 AS b on find_in_set(b.`List Idsubjek`,a.`List Idsubjek`)>0
WHERE b.`List Idsubjek` IN (52, 54, 55, 67)
AND `studentid` = '$id'
List Idsubjek
IN (52, 54, 55, 67) – Robbert 24 November 2015 в 17:00WHERE
обязательно избыточно, если использоватьfind_in_set
вJOIN
. Он думает, что здесь возникает путаница, поскольку он говорит, что он ХОЧЕТ показать географию, но она не будет отображаться с условиемList Idsubjek IN (52, 54, 55, 67)
. Нормализация помогает, посколькуfind_in_set
не совсем эффективен. – anothershrubery 24 November 2015 в 17:32