всем привет. делаю тесты по истории, химии, физике. есть таблица с темами (theme) (темы соответственно история, физика, химия) и таблица с вопросами (quest). нужно сделать чтобы в одном тесте были вопросы по химии и физике. не могу придумать как это реализовать. в таблице с темами такие столбцы: id, name в таблице с вопросами следующее: id, theme (id темы), quest, answer мои мысли такие: добавляем в таблице с темами колонку unity (например) и туда записываем темы которые входят в этот тест: 2 (химия) и 3 (физика), а вот как сделать нормальный запрос, чтобы из таблицы с вопросами вытащить нужные по заданным темам, не знаю. да, знаю про вариант Код (PHP): SELECT * FROM quest WHERE theme=2 AND theme=3 но если у меня тем штук 100? и надо сделать 20 объединенных тестов, каждый из которых содержит по 10 тем? к каждому писать свой запрос как то не очень. может я неправильно мыслю.. подскажите как реализовать Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
это бывает с новичками, не чувствуют где следует писать И, а где ИЛИ. запомни: одно поле не может быть одновременно равно двум разным значениям! так что не вариант Добавлено спустя 1 минуту 26 секунд: а вариант когда "сотня ИЛИ" оформляется как Код (PHP): … WHERE x IN(1, 2, 20, 123, 12)
да, в этом ты прав. проглядел говорят IN жутко тормозит в таких случаях. в принципе я буду рад, если хотя бы таким способом все будет работать, но все же хотелось бы, чтобы было более профессионально что ли
еще есть вариант UNION либо UNION ALL. в некоторых случаях он дает выигрышь в скорости. Код (PHP): SELECT a,b,c FROM t WHERE x=2 UNION ALL SELECT a,b,c FROM t WHERE x=3 разница между UNION и UNION ALL в том, что в первом случае объединяемые строки сравниваются между собой (значения всех полей) чтобы выкинуть дубли. если ты и так уверен, что дублей не будет или они тебе не мешают, то ставь UNION ALL.
врут. или цитируй не только утверждение, но и контекст в котором оно делалось. если у тебя 100 строк в таблице, можно хоть декартово произведение заипенить, тормозить не будет. вообще, задачу надо сначала решить, а потом оптимизировать… если захочешь.