Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Тупо не понимаю как работает JOIN (1sqlite) (число прочтений - 5013 )
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Тупо не понимаю как работает JOIN (1sqlite)
27. Августа 2010 :: 06:56
Печать  
Справочник Спр0 - владелец справочников Спр1, Спр2 и Спр3.
Надо "сплясав" от справочника Спр1 ("подтянув" к нему владельца - это в принципе лирика но на всякий случай привожу ситуацию полностью) выдрать из справочников Спр2 и Спр3 элементы того же владельца и с кодами, совпадающими с кодами Спр1 (если они есть) или пустоту (если таких элементов нету). Т.е., используя последовательно LEFT JOIN ("при котором все записи из первой (левой) таблицы включаются в динамический набор, даже если во второй (правой) таблице нет соответствующих им записей.") хочу получить набор записей:
- Эл1по всем элементам справочника Спр1
- Эл2по найденным элементам справочника Спр2 / пустопо не(!)найденным элементам справочника Спр2
- Эл3по найденным элементам справочника Спр3 / пустопо не(!)найденным элементам справочника Спр3

Тупо пытаюсь выдрать последовательными LEFT JOIN.

1.Вот это:
Код
Выбрать все
|SELECT
|	Спр0.id [Эл0 :Справочник.<Спр0вид>], Спр0.code as Спр0код, Спр0.Рекв as Спр0рекв, Спр1.id [Эл1 :Справочник.<Спр1вид>]
|	, Спр2.id [Эл2: Справочник.<Спр2вид>]
|	, Спр3.id [Эл2: Справочник.<Спр3вид>]
|FROM [Справочник.<Спр1вид>] as Спр1 LEFT JOIN [Справочник.<Спр0вид>] as Спр0 ON Спр0.id = Спр1.parentext
|	LEFT JOIN [Справочник.<Спр2вид>] as Спр2 ON Спр2.parentext = Спр0.id AND Спр2.code = Спр1.code
|	LEFT JOIN [Справочник.<Спр3вид>] as Спр3 ON Спр3.parentext = Спр0.id AND Спр3.code = Спр1.code
|WHERE Спр0.ismark <> '*'
|	AND Спр1.ismark <> '*'
|	AND Спр2.ismark <> '*'
|	AND Спр3.ismark <> '*'
|	AND Спр0.Рекв < 3
 

=== выдает  записи только строго с найденными (одновременно!) элементами Спр2 и Спр3. При этом в справочнике Спр3 меньше кодов чем с Спр2 (и Спр1 если это важно!), но строк с найденными элементами Спр1 и Спр2 но с ненайденными Спр3 - нету.
Что я делаю не так и как сделать так?

ЗЫ: и не бейте ногами, да, я ламер в t-sql, я в курсе что мануалы надо ковырять - я ковырял но не помогло. Нерешительный
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #1 - 27. Августа 2010 :: 07:08
Печать  
ага, вот это вот зачет условие для соедиения:

ON Спр2.parentext = Спр0.id AND Спр2.code = Спр1.code
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #2 - 27. Августа 2010 :: 07:13
Печать  
Eprst писал(а) 27. Августа 2010 :: 07:08:
ага, вот это вот зачет условие для соедиения:

ON Спр2.parentext = Спр0.id AND Спр2.code = Спр1.code

что не так то? условие для связи с более "левой" выборкой (Спр0+Спр1) с условием совпадения владельца с текущим элементом Спр0 и совпадения кода с кодом Спр1. или ты о чём?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #3 - 27. Августа 2010 :: 07:27
Печать  
вот так поменяй попробуй:
Код
Выбрать все
|	LEFT JOIN [Справочник.<Спр2вид>] as Спр2 ON Спр2.parentext = Спр1.parentext AND Спр2.code = Спр1.code
|	LEFT JOIN [Справочник.<Спр3вид>] as Спр3 ON Спр3.parentext = Спр1.parentext AND Спр3.code = Спр1.code 


  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #4 - 27. Августа 2010 :: 07:55
Печать  
Eprst писал(а) 27. Августа 2010 :: 07:27:
вот так поменяй попробуй: ...

не помогает. точно так же возвращает набор, в во всех колонках которого элементы строго наличествуют.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #5 - 27. Августа 2010 :: 07:57
Печать  
А что не устраивает в результирующем наборе ?
Ты же соединяешь Спр2 и Спр3 по жестко заданным условиям на код элемента.
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #6 - 27. Августа 2010 :: 08:06
Печать  
Eprst писал(а) 27. Августа 2010 :: 07:57:
А что не устраивает в результирующем наборе ?
Ты же соединяешь Спр2 и Спр3 по жестко заданным условиям на код элемента.

Cthulhu писал(а) 27. Августа 2010 :: 06:56:
... Надо "сплясав" от справочника Спр1 ... выдрать из справочников Спр2 и Спр3 элементы того же владельца и с кодами, совпадающими с кодами Спр1 (если они есть) или пустоту (если таких элементов нету). Т.е., используя последовательно LEFT JOIN ("при котором все записи из первой (левой) таблицы включаются в динамический набор, даже если во второй (правой) таблице нет соответствующих им записей.") хочу получить набор записей ...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #7 - 27. Августа 2010 :: 08:15
Печать  
Ну, тогда тупо не ставь условие на код справочника в соединении, поимеешь
все элементы Спр2 и Спр3...
и в селект
Код
Выбрать все
|--, Спр2.id [Эл2: Справочник.<Спр2вид>]
|,case when  Спр2.code = Спр1.code then Спр2.id else $ПустойИД end [Эл2: Справочник.<Спр2вид>] 



если я тебя правильно понял про "пустоту" , если нет с таким кодом.
ЗЫ: а так, строки из правой присоединенной таблички попадут в результирующий набор, только если они попадают под условие соединения и фильтр в ветке where
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #8 - 27. Августа 2010 :: 08:23
Печать  
Eprst писал(а) 27. Августа 2010 :: 08:15:
Ну, тогда тупо не ставь условие на код справочника в соединении, поимеешь
все элементы Спр2 и Спр3...
и в селект
Код
Выбрать все
|--, Спр2.id [Эл2: Справочник.<Спр2вид>]
|,case when  Спр2.code = Спр1.code then Спр2.id else $ПустойИД end [Эл2: Справочник.<Спр2вид>] 



если я тебя правильно понял про "пустоту" , если нет с таким кодом.

Но мне ВАЖНО соответствие кодов, и в каждой записи должен быть приджойнен или элемент с таким же кодом и владельцем, или пустота (но запись в результирующем наборе должна быть в любом случае!).
или я неверно понял дважды процитированную фразу из описания LEFT JOIN????

Вот даже ворт такой тупой код:
Код
Выбрать все
|SELECT
|	Спр1.parentext [Эл0 :Справочник.<Спр0вид>]
|	Спр1.id [Эл1 :Справочник.<Спр1вид>]
|	, Спр3.id [Эл2: Справочник.<Спр3вид>]
|FROM [Справочник.<Спр1вид>] as Спр1
|	LEFT JOIN [Справочник.<Спр3вид>] as Спр3
|		ON Спр3.parentext = Спр1.parentext AND Спр3.code = Спр1.code
|WHERE
|	AND Спр1.ismark <> '*'
|	AND Спр3.ismark <> '*' 


== для имеющихся 15-ти элементов справочника Спр1 из которых только для одного есть соответствующий ему (по владельцу и по коду - т.е. именно по условию, которое упомянуто в процитированном описании LEFT JOIN) возвращает единственную запись с непустым элементом справочника Спр3
я в полных непонятках...  Плачущий

Добавлено: ну хренсним, чтобы посмотреть - попробовал как ты говоришь, результат: no such column: $ПустойИД!..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #9 - 27. Августа 2010 :: 08:37
Печать  
Ну смотри, у тебя есть табличка вида

спр1:

id    code  name
1      10     Иванов
2      20     Петров
3      30     Сидоров

спр2:

id    code  name
1      40     Вася
2      20     Федя
3      99     Веня
3      10     Стасик
3      20     Славик

когда ты делаешь такой запрос
select
   спр1.name Фамилия
   ,спр2.name  Имя
from спр1
left join спр2 on спр2.id = спр1.id

то на выходе будет табличка
Фамилия    Имя
Иванов      Вася
Петров      Федя
Сидоров   Веня
Сидоров   Стасик
Сидоров   Славик

если ты вот такое условие воткнешь еще
  left join спр2 on спр2.id = спр1.id and спр2.code = спр1.code
то на выходе:

Фамилия    Имя
Иванов      
Петров      Федя
Сидоров  


  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #10 - 27. Августа 2010 :: 08:38
Печать  
на  :ПустойИД замени.

  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #11 - 27. Августа 2010 :: 08:42
Печать  
Eprst писал(а) 27. Августа 2010 :: 08:37:
Ну смотри, у тебя есть табличка вида

спр1:

id    code  name
1      10     Иванов
2      20     Петров
3      30     Сидоров

спр2:

id    code  name
1      40     Вася
2      20     Федя
3      99     Веня
4      10     Стасик

когда ты делаешь такой запрос
select
   спр1.name Фамилия
   ,спр2.name  Имя
from спр1
left join спр2 on спр2.id = спр1.id

дальше не в ту сторону ...

Смотри.

спр1:
id    code  name
1      10     Иванов
2      20     Петров
3      30     Сидоров
5      50     Назаборногузадерищенко

спр2:
id    code  name
1      40     Вася
2      20     Федя
3      99     Веня
4      10     Стасик

от запроса:
select  спр1.name Фамилия, спр2.name  Имя
from спр1 left join спр2 on спр2.id = спр1.id

хочу:
Фамилия    Имя
Иванов      Вася
Петров      Федя
Сидоров   Веня
Назаборногузадерищенко

не то хочу????
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #12 - 27. Августа 2010 :: 08:44
Печать  
у тебя так и будет.. я поправил пример - сделав побольше одинаковых id для понимания процесса Улыбка
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #13 - 27. Августа 2010 :: 08:48
Печать  
Eprst писал(а) 27. Августа 2010 :: 08:44:
у тебя так и будет.. я поправил пример - сделав побольше одинаковых id для понимания процесса Улыбка

у меня НЕ так получается (отличие от твоего только в том, что условие составное через AND - и ##па, выдает только одну запись с непустым значением LEFT-при-JOIN-ненной таблицы игнорируя все записи для которых по условию соответствия в ней не найдено)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #14 - 27. Августа 2010 :: 08:53
Печать  
ты вот это дочитал ?

Цитата:
если ты вот такое условие воткнешь еще
  left join спр2 on спр2.id = спр1.id and спр2.code = спр1.code
то на выходе:

Фамилия    Имя
Иванов      
Петров      Федя
Сидоров   
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #15 - 27. Августа 2010 :: 09:05
Печать  
Eprst писал(а) 27. Августа 2010 :: 08:53:
ты вот это дочитал ?

Цитата:
если ты вот такое условие воткнешь еще
 left join спр2 on спр2.id = спр1.id and спр2.code = спр1.code
то на выходе:

Фамилия    Имя
Иванов      
Петров      Федя
Сидоров  

Дочитал и ответил - у меня при использовании составного условия (по равенству code и по равенству parentext) выдается (в контексте твоего примера) только набор:
Фамилия    Имя
Петров      Федя
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #16 - 27. Августа 2010 :: 09:23
Печать  
Cthulhu писал(а) 27. Августа 2010 :: 08:23:
Вот даже ворт такой тупой код:
Код
Выбрать все
|SELECT
|	Спр1.parentext [Эл0 :Справочник.<Спр0вид>]
|	Спр1.id [Эл1 :Справочник.<Спр1вид>]
|	, Спр3.id [Эл2: Справочник.<Спр3вид>]
|FROM [Справочник.<Спр1вид>] as Спр1
|	LEFT JOIN [Справочник.<Спр3вид>] as Спр3
|		ON Спр3.parentext = Спр1.parentext AND Спр3.code = Спр1.code
|WHERE
|	AND Спр1.ismark <> '*'
|	AND Спр3.ismark <> '*' 


== для имеющихся 15-ти элементов справочника Спр1 из которых только для одного есть соответствующий ему (по владельцу и по коду - т.е. именно по условию, которое упомянуто в процитированном описании LEFT JOIN) возвращает единственную запись с непустым элементом справочника Спр3

Для остальных 14 записей Спр3.ismark есть null, значит и результат условия Спр3.ismark <> '*' есть null, а null не есть истина, по-этому записи отбрасываются, как не соответствующие условию.
Нужно или перенести это условие в секцию FROM или дополнить условие соответствующим образом.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #17 - 27. Августа 2010 :: 09:30
Печать  
И ещё. Конструкция с выкидыванием из условия равенства кодов и с CASE в колонке на двух таблицах дает что надо.
НО! Мне-то нужен набор записей [спр1] - [спр2/пусто] - [спр3/пусто] - [спр4/пусто], построенный по условию совпадения владельца+кода слева-направо, а использование выкидывания из условия равенства кодов и с CASE в колонке выдает дикое количество записей со всеми(!) возможными(!) сочетаниями элементов подчиненных одному владельцу...
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #18 - 27. Августа 2010 :: 09:33
Печать  
berezdetsky писал(а) 27. Августа 2010 :: 09:23:
... Для остальных 14 записей Спр3.ismark есть null, значит и результат условия Спр3.ismark <> '*' есть null, а null не есть истина, по-этому записи отбрасываются, как не соответствующие условию.
Нужно или перенести это условие в секцию FROM или дополнить условие соответствующим образом.

Ох, да! ну я тупой. пойду дальше думать...

добавлено: чот не придумывается - как его "перенести" или "дополнить"...  Нерешительный
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #19 - 27. Августа 2010 :: 09:38
Печать  
Блин , а я ужо тебе и тест наваял.. с примеров про ивановых..наглядно.
Улыбка)
  

___________003.ert ( 28 KB | Загрузки )
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #20 - 27. Августа 2010 :: 09:40
Печать  
Cthulhu писал(а) 27. Августа 2010 :: 09:33:
добавлено: чот не придумывается - как его "перенести" или "дополнить"...  Нерешительный


в условие присоединения воткни это условие..
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #21 - 27. Августа 2010 :: 09:45
Печать  
Cthulhu писал(а) 27. Августа 2010 :: 09:33:
добавлено: чот не придумывается - как его "перенести" или "дополнить"...  Нерешительный

Перенести:
Код
Выбрать все
|SELECT
|	Спр1.parentext [Эл0 :Справочник.<Спр0вид>]
|	Спр1.id [Эл1 :Справочник.<Спр1вид>]
|	, Спр3.id [Эл2: Справочник.<Спр3вид>]
|FROM [Справочник.<Спр1вид>] as Спр1
|	LEFT JOIN [Справочник.<Спр3вид>] as Спр3
|		ON Спр3.parentext = Спр1.parentext AND Спр3.code = Спр1.code AND Спр3.ismark <> '*'
|WHERE
|	AND Спр1.ismark <> '*' 


С дополнить сложнее - я 1sqlite не знаю  Нерешительный На T-SQL это было бы что-то типа

IsNull(Спр3.ismark, '') <> '*'

Тут нужно заменить IsNull на 1sqlite-ный аналог.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #22 - 27. Августа 2010 :: 10:15
Печать  
Eprst писал(а) 27. Августа 2010 :: 09:40:
Cthulhu писал(а) 27. Августа 2010 :: 09:33:
добавлено: чот не придумывается - как его "перенести" или "дополнить"...  Нерешительный

в условие присоединения воткни это условие..

Да, я немного ещё подумал - и догадался тоже - в WHERE оставляю только условие по ismark на Спр1, а во все джойны добавляю условие AND Спрi.ismark = Спр1.ismark
уцепил четіре справочника в цепочку джойнов - пашет. Улыбка
ща ещё на периодический реквизит Спр0 (самого начального варианта) буду думать как аналогично подцепить джойнами два подчиненных справочника таким же макаром.

ЗЫ: а там ещё будет вопрос с джойном по максимальному не превышающему коду... ещё поспрашиваю!.. Улыбка

ЗЗЫ: berezdetsky, BgInfo-й положил на раб.стол "WHERE накладывается на сформированный набор записей а не на этапе его составления!!!", спасибо тебе!
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #23 - 27. Августа 2010 :: 20:54
Печать  
Код
Выбрать все
SELECT TOP 1 ... 


а такое в 1sqlite не пашет?..
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #24 - 28. Августа 2010 :: 05:58
Печать  
В конце запроса допиши
LIMIT 1
  
Наверх
ICQ  
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #25 - 28. Августа 2010 :: 08:06
Печать  
Salimbek писал(а) 28. Августа 2010 :: 05:58:
В конце запроса допиши
LIMIT 1

Так и делаю, спасибо.
Но. Я 1sqlite(прямые запросы) юзаю для ускорения. А LIMIT накладывается вроде на сформированный набор записей? Или все-таки используется в процессе формирования набора записей? Если на результат - то это только "бантик", который ничего не ускорит (то же самое будет если без него и потом юзать только первую строку результата запроса).
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #26 - 28. Августа 2010 :: 09:13
Печать  
Cthulhu писал(а) 28. Августа 2010 :: 08:06:
Так и делаю, спасибо.
Но. Я 1sqlite(прямые запросы) юзаю для ускорения. А LIMIT накладывается вроде на сформированный набор записей? Или все-таки используется в процессе формирования набора записей? Если на результат - то это только "бантик", который ничего не ускорит (то же самое будет если без него и потом юзать только первую строку результата запроса).

А ты думаешь Top 1 в MSSQL как-то по другому работает?
  
Наверх
ICQ  
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: Тупо не понимаю как работает JOIN (1sqlite)
Ответ #27 - 28. Августа 2010 :: 09:51
Печать  
Salimbek писал(а) 28. Августа 2010 :: 09:13:
А ты думаешь Top 1 в MSSQL как-то по другому работает?

Думаю, да.
При том, что обе конструкции есть в t-sql и про limit гугль выдает ссылки на нечто вроде предостережений (в частности при его использовании с rand()).
Но это лишь мои предположения - не более. Интересно было бы выслушать мнение тех, кто разбирается в вопросе лучше меня.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать