![]() |
|
Модераторы: skyboy |
![]()
|
|
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Приветы! Есть форум, есть таблица:
| post | topic | author | Ествственно к одному топику относятся много постов, у каждого из которых есть однозначный автор. Теперь необходимо выбрать из этой таблицы только те топики, куда постили авторы X, Y, Z, .. вместе. Для двух авторов решение есть:
Как видим, получается JOIN нехилый. Если расширить запрос до 3 авторов, то БД не справляется при большом количестве данных. А мы хотим, что бы запрос работал для 2-5 авторов минимум..... Вопрос бы решился вложенными селектами, но их в мускуле не существует.... |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 2 Всего: 43 |
Не понял. Одна запись в БД - один ответ одного из авторов?
Почему же тогда не подходит:
Или все немного сложнее и эти авторы тоже выбираются из других таблиц? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
При твоём запросе выберуться топики, где атор X или Y.
Надо, чтобы выбрались только те топики, где автором был и X и Y. Как например этот топик, куда мы с тобой сейчас пишем. Он должен попадать при поиске sergej.z и DENN. То есть только те топики, где мы с тобой пересекались. Просто топики, где постил я, а ты нет, или наоборот в результат входить не должны. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: нет Всего: 73 |
sergej.z, сложный вопрос, мне кажется что твой вариант самый оптимальный. А вложенные селекты есть в MySQL начиная с версии 4.1.x.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
А можно ли как нибуть ограничить количество в течении исполнения запроса? Просто он уже для 3-х человек загибается. Может через temp таблицу? Ведь задачка по сути своей простенькая. Но чтото не как к решению не подъехать
|
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: нет Всего: 73 |
Создан индекс на поле author?
Что-то я ни как не могу представить как при помощи временной таблицы реализовать... хотя что-то в голове крутится... но ни как... Добавлено @ 13:20 Количество можно ограничить при помощи директивы limit 0, 10. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Выбираем во временную таблицу все темы, где есть посты автора 1. Выбираем из нее во вторую временную таблицу все темы, где есть посты автора 2. Выбираем из нее в третью временную таблицу все темы, где есть посты автора 3. ... Выбираем из нее в N-ю временную таблицу все темы, где есть посты автора N. Последняя временная таблица и есть то что ты хочешь. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Выбираем во временную таблицу все темы, где есть посты автора 1. Вот как это сделать Это надо типа
Это же сколько темпов надо Вопрос наклёвывается.... оптимальнее нельзя? |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Можно. Обновить mySQL, чтобы можно было вложенные селекты. А еще можно
где N = количество авторов. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Akina?
хитро, умно :? держи звезду! |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Хм... Последний не прокатывает..
Говорит "unknown column 'ct' in where clause". Это приколы мускула?.... |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Возможно он не умеет агрегатные функции именовать - попробуй либо where count(topic)=N, либо просто вторую временную таблицу сделать... мне попробовать негде - мускула поставленного нету...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Немножко пришлось переделать. Работает на ураю Респект тебе, Акина!
Вопос только остался, как скомпоновать запросы, чтобы таблицу не создавать лишнюю? |
|||
|
||||
| Бонифаций |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 20 Всего: 40 |
приколы sql-я . Патамучта group by не написал -------------------- Бонифаций. |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Я написал, он всё равно на "unknown column" ругается. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |