| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Двойной запрос к одной таблице |
| Автор: CaptainNemo 17.1.2017, 11:03 | ||||||
Подскажите, у меня вот запрос работает корректно за исключением последней строчки
Мне нужно в одном запросе получить данные из общей таблицы comm_manufacturer (список производителей) Первый раз я запрашиваю производителя трактора
А второй раз из этой же таблицы должен получить производителя двигателя этого трактора
Но если я прописываю сразу два этих условия, то ничего не возвращается. Спасибо) |
| Автор: CaptainNemo 17.1.2017, 14:23 | ||||||||
Я просто хотел узнать, можно ли одним запросом выудить из таблицы comm_manufacturer данные, так, что бы в ответе (массиве) отображалось сначала запись, соответствующая
а вторым элементом массива запись, для которой
Такой номер у меня проходит, только когда обращаюсь к группе таблиц, которые связаны между собой по ID
А тут, нужно к одной и той же таблице два раза обратиться в одном запросе, возможно ли это? |
| Автор: Akina 17.1.2017, 14:58 | ||
Вопрос непонятен. Не получается словами - попробуйте минимальным примером показать, что нужно, что ли... |
| Автор: CaptainNemo 17.1.2017, 15:27 | ||||||||
Хорошо, попробую. Есть много таблиц в phpmyadmin. Эти таблицы связаны через ID. На php у меня написан обработчик, я создаю соединение и отправляю запрос:
В этом запросе только одна внешняя переменная '$firstElem' - индекс элемента таблицы trac. Мне в ответ приходит инфа и из других таблиц trac, trac_tag, trac_engine, comm_manufacturer, trac_tires и эта инфа соответствует переменной '$firstElem'. Ответ приходит в виде вот такого массива
Из этого массива я собираю сводную таблицу, в которой отображается вся инфа по объекту с индексом '$firstElem'. Однако для полноты картины, хотелось бы еще подтянуть в этот массив (приведенный выше) еще одну запись, которая соответствовала бы условию
|
| Автор: Akina 17.1.2017, 15:50 |
| Не надо рассказывать, что сделано. Всё равно надо делать "с нуля". Покажите пример - таблицы с исходными данными и желаемый результат запроса НА ЭТИХ ДАННЫХ. |
| Автор: Zloxa 18.1.2017, 09:45 | ||||||||||
Akina, зачем мучишь хлопца. Ясно же об что он споткнулся. CaptainNemo, ты можешь использовать в соединении одну и ту же таблицу сколь угодно раз. Для того, чтобы при этом не происходил конфликт имен следует использовать псевдонимы.
Не зная стоящей перед вами задачи, не могу понять, умышленно ли вы используете внутреннее соединение, потому хочется обратить ваше внимание на то, что если хотя бы одно из полей, по которым вы выполняете соединения окажется не заполненным, ваша выборка будет возвращать пустой результат не смотря на то, что все остальные поля заполнены. Если для вашей задачи такое поведение не подходяще, рекомендую обратить внимание на внешнее соединение (конструкция left join) |
| Автор: Garmahis 18.1.2017, 11:48 |
| Конечно в данном случае можно использовать конструкцию LEFT JOIN или UNION. Но сразу предупреждаю что сам формат таблиц и связи между таблицами приведет о очень долгой обработке запроса или таймауту. Я рекомендую вам написать подробнее какие поля в таблице их назначение и как они связаны. Тогда можно будет подсказать как это делать правильно. |
| Автор: CaptainNemo 18.1.2017, 14:39 |
| Zloxa, Garmahis, спасибо, теперь все работает) |
| Автор: Zloxa 18.1.2017, 16:14 | ||
Скажите, пожалуйста, на чем зиждиться это утверждение? |
| Автор: Garmahis 18.1.2017, 17:37 |
| Таблица trac по сути набор различных id. Будет очень трудно прописать адекватные индексы. |
| Автор: Zloxa 18.1.2017, 20:53 | ||||
Все выглядит как обычная нормализация (возможно очень избыточная). Доступ к trac осуществляется, судя по всему, по первичному ключу. Справочники так же, по всей видимости, подтягиваются по первичным ключам. Другие индексы тут не нужны. По всей видимости вы имели негативный опыт чего-то другого, но на это похожее, и теперь на молоко дуете. Я даже осмелюсь предположить что вам раньше приходилось сталкиватсься с https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_modelили ее частностями. Здесь - совсем не то. Добавлено @ 20:56 смущает, пожалуй только предикат
выглядит так, будто может быть получено две строки результата. если оба поля заполнены и различаются, что, скорее всего, не требуется. |