Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вложенный запрос к одной базе, или...

Сообщения:  [1-3] 

 
 автор: Слух   (02.02.2010 в 11:12)   письмо автору
 
   для: Trianon   (01.02.2010 в 22:11)
 

Спасибо то что нужно.
Насколько я понял
USING(user_id) =  ON m2.user_id = m1.user_id


Как то все очень просто получилось, наверно я вчера что-то не то пробовал. Не хватает опыта(, я знал что нужно "заджойнить" таблицу саму на себя.

  Ответить  
 
 автор: Trianon   (01.02.2010 в 22:11)   письмо автору
 
   для: Слух   (01.02.2010 в 17:39)
 

>И тогда уже спрошу про такую связь.
Это крайне неудачный шаг.
Создайте отдельную тему.

Каждая тема описывает определенную проблему.
Сами темы никто не экономит.
Не факт, что один и тот же человек захочет дискутировать по обеил проблемам.
И уж совершенно точно никто не пожелает высказывать мысли вперемешку.

По первому вопросу.
Вместо сложного запроса лучше применить автосоединение
messages m1 JOIN messages m2 USING(user_id)

  Ответить  
 
 автор: Слух   (01.02.2010 в 17:39)   письмо автору
 
 

Например есть такая структура
msg_id msg_text user_id

Можно ли одним запросом вывести все сообщения пользователя, по идентификатору его сообщения?
До вложенного запроса я конечно и сам додумался, но возможно есть более "изящный" и правильный вариант?

select * from messages where user_id = (select user_id from messages where msg_id = 4);



И тогда уже спрошу про такую связь.
Пусть будет какой либо базар. Где пользователи могут добавлять свой товар, оставлять характеристики и описания.
tovar_id user_id tovar_description add_date etc


И каждый пользователь может предложить свой товар, на обмен товару другого пользователя.
user_id это идентификатор пользователя который хочет предложить обмен
tovar_id_to_exchange это идентификатор товара, который пользователь предлагает на обмен
tovar_id это идентификатор товара другого пользователя
tovar_id tovar_id_to_exchange user_id describtion add_date


Таблицу юзеров описывает нет смысла, да и она не нужна по сути.

Ну и самое интересное. Нужно получить список товаров, текущего пользователя(есть ид), которые он может обменять на конкретный товар(есть ид). Но нужно убирать из списка товары, которые пользователь уже поставил на обмен. И не нужно выбирать товары, если текущий товар является товаром пользователя.

Вобщем если не брать самое последнее условие, я выбираю вложенным селектом

select * 
from tovar 
where tovar_id not in(
 select tovar_id_to_exchange
 from exchange
 where user_id = 2 and tovar_id = 5
)
and user_id = 2


Еще немного опишу подробней. Пользователь с ид 2, зашел на страницу товара с ид 5, и должен получить список своих товаров, которые он еще не поставил на обмен этому товару с ид 5. Но как в этом запросе еще "предохранится" от вывода списка товара на обмен, если пользователь зашел на свой собственный товар?
Впринципе, первый вопрос про селект из одной базы мне для этого и нужен.
Заранее спасибо, буду рад любой помощи

З.Ы. Ну и да, до такого я додумался сам. Правда я оочень не люблю вложенные селекты, работает не супер быстро, особенно с IN(), да и выглядит мягко говоря страшно(

select *
from tovar
where tovar_id not in(
 select tovar_id_to_exchange
 from exchange
 where user_id = 2 and tovar_id = 5
)
and tovar_id not in(
 select tovar_id
 from tovar
 where (
  select user_id 
  from tovar 
  where tovar_id = 5)
)
and user_id = 2

  Ответить  

Сообщения:  [1-3] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования