Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Вопрос по выборке из двух таблиц
Связь между таблицами по sv_ticket.id.
Делаю запрос на выборку данных из таблицы sv_ticket, при этом нужно подхватить соответствующую строку из таблицы sv_ticket_entry (sv_ticket_entry.tid = sv_ticket.id), но только одну строку, самую первую.
Корректна ли выборка представленная выше?
(она работает, но так как я не силён в SQL имеются сомнения).
Спасибо
EuGen
Отправлено: 10 Октября, 2012 - 11:12:24
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
avtor.fox пишет:
Корректна ли выборка представленная выше?
Выборка использует эффект обработки группировки MySQL - а именно возможность групировать даже по полям, которые не входят в группу агрегации. В этом случае, вообще говоря, нет гарантии, что выберется именно первая строка. Правильнее выразиться, что выберется "какая попало". Но как правило, попадает строка с наименьшим _ROWID.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
avtor.fox
Отправлено: 10 Октября, 2012 - 11:19:51
Постоянный участник
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
Помог: 50 раз(а)
EuGen
Спасибо.
Данный запрос составлял я сам, по примерам из мануала (более-менее понятно).
Но вот с выборкой по наименьшему id из таблицы sv_ticket_entry я пришёл в тупик. (Добавление)
Вот
Работает, но опять вызывает сомнения. Можно ли написать короче (правильней?) данный запрос?
EuGen
Отправлено: 10 Октября, 2012 - 12:06:01
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Подозреваю, что в EXPLAIN Вы увидите DEPENDED SUBQUERY, что является одним из худших вариантов.
Не могу привести точную ссылку, но Вам вполне подойдет GROUP BY, так как Вам нужен минимальный id. Поскольку _ROWID совпадает с первичным ключом (определенным у Вас по полю id), то вариант с группировкой должен всегда давать корректные результаты.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
avtor.fox
Отправлено: 10 Октября, 2012 - 12:16:43
Постоянный участник
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
Помог: 50 раз(а)
Угу, DEPENDENT SUBQUERY имеется.
Спасибо за помощь
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.