Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Проблема с запросом на 1sqlite [част. решено] (число прочтений - 6914 )
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Проблема с запросом на 1sqlite [част. решено]
23. Декабря 2008 :: 21:19
Печать  
Не получается. Мой первый запрос.
Код
Выбрать все
	ТекстЗапроса="
		|SELECT
		|Форумы.Descr [Наименование :Справочник.Форумы],
		|Форумы.Проблема [Проблема :Справочник],
		|FROM
		|Справочник_Форумы Форумы, Справочник_Комментарии Сообщения
		|WHERE
		|(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (RIGHT(Форумы.ПоследнееСообщение,9) = Сообщения.ID)
		|ORDER BY Сообщения.ДатаВремяСоздания DESC
		|LIMIT " + Начало + "," + Колво; 


Ошибка: Цитата:
near "FROM": syntax error

А как иначе мне задать условие Форумы.ПоследнееСообщение=Сообщение ?
Заранее спасибо.
« Последняя редакция: 25. Декабря 2008 :: 10:09 - blindvic »  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #1 - 24. Декабря 2008 :: 02:18
Печать  
Запятую убери!
  
Наверх
ICQ  
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #2 - 24. Декабря 2008 :: 06:18
Печать  
Блин, глюкнул! Я там убрал 2 строки, чтобы проще было - и вот, на тебе.
После исправления вылазит та самая ошибка:
Код
Выбрать все
	ТекстЗапроса="
		|SELECT
		|Форумы.Descr [Наименование :Справочник.Форумы],
		|Форумы.Проблема [Проблема :Справочник]
		|FROM
		|Справочник_Форумы Форумы, Справочник_Комментарии Сообщения
		|WHERE
		|(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (RIGHT(Форумы.ПоследнееСообщение,9) = Сообщения.ID)
		|ORDER BY Сообщения.ДатаВремяСоздания DESC
		|LIMIT " + Начало + "," + Колво; 


Цитата:
near "(": syntax error

Как я понимаю 1sqlite не нравится right()
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #3 - 24. Декабря 2008 :: 06:36
Печать  
Используй вместо RIGHT substr(X,Y,Z)
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #4 - 24. Декабря 2008 :: 07:36
Печать  
Сработало:
Код
Выбрать все
 		|SELECT
		|Форумы.Descr [Наименование :Справочник.Форумы],
		|Форумы.Проблема [Проблема :Справочник],
		|Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
		|FROM
		|Справочник_Форумы Форумы, Справочник_Комментарии Сообщения
		|WHERE
		|(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
		|ORDER BY ДатаПослСообщения DESC
		|LIMIT " + Начало + "," + Колво; 


Это лучший способ SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID, или есть другие предусмотренные для таких случаев средства?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #5 - 24. Декабря 2008 :: 08:45
Печать  
А куда лучше-то?
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #6 - 24. Декабря 2008 :: 14:43
Печать  
JohnyDeath писал(а) 24. Декабря 2008 :: 08:45:
А куда лучше-то?

Я только начинаю работать с 1sqlite. Я подумал, что если парсер делает подмены на имена таблиц, может можно это как-то использовать здесь.
Форумы.ПоследнееСообщение - справочник неопределенного типа, ИД 13 символов. А Комментарии.id - 9 символов. Т.е. из Форумы.ПоследнееСообщение надо отрезать код таблицы, чтобы получить нужный ид. Если вдруг Форумы.ПоследнееСообщение станет справочником определенного вида, тогда текст запроса надо менять. Может в парсере есть какя-нить функция приводящая ид к универсальному виду ид_таблицы+ид_записи?

И попутный вопрос. Поскольку Форумы.ПоследнееСообщение - справочник неопределенного вида, этот реквизит может быть и Справочник.Комментарии2 (допустим), у к-го тоже есть реквизит ДатаВремяСоздания.
Я хочу, чтобы запрос выдал мне элементы справочника Форумы упорядоченные по Форумы.ПоследнееСообщение.ДатаВремяСоздания, ПоследнееСообщение будучи справочником неопределенного вида.

Как мне это сделать?
Спасибо
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #7 - 24. Декабря 2008 :: 14:48
Печать  
blindvic писал(а) 24. Декабря 2008 :: 14:43:
JohnyDeath писал(а) 24. Декабря 2008 :: 08:45:
А куда лучше-то?

Может в парсере есть какя-нить функция приводящая ид к универсальному виду ид_таблицы+ид_записи?

Т.е. хотелось бы (мне кажется так надежнее - хотя ид теоретически не может быть в в 1с в двух разных таблицах совпадать), чтобы было так
Код
Выбрать все
WHERE (Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND ($универс_ид(Форумы.ПоследнееСообщение) = $универс_ид(Сообщения.ID)) 


  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #8 - 24. Декабря 2008 :: 14:50
Печать  
Можно просто дополнить твоё "Сообщения.ID" видом справочника, т.е. получиться что-то типа:
Код
Выбрать все
Форумы.ПоследнееСообщение = (:ВидСправочника.ВидСправочникаСообщений || Сообщения.ID) 

  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #9 - 24. Декабря 2008 :: 14:56
Печать  
По второму вопросу можно наверное как-то так:
Код
Выбрать все
|SELECT ...
		|coalesce(Сообщения.ДатаВремяСоздания, Комментарии2.ДатаВремяСоздания) ДатаПослСообщения
		|FROM ....
		|ORDER BY ДатаПослСообщения DESC 


При условии, что ты делал LEFT JOIN таблиц "Комментарии2" и "Сообщения".
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #10 - 24. Декабря 2008 :: 14:58
Печать  
JohnyDeath писал(а) 24. Декабря 2008 :: 14:50:
Можно просто дополнить твоё "Сообщения.ID" видом справочника, т.е. получиться что-то типа:
Код
Выбрать все
Форумы.ПоследнееСообщение = (:ВидСправочника.ВидСправочникаСообщений || Сообщения.ID) 


Код
Выбрать все
		|WHERE
		|(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (Форумы.ПоследнееСообщение = (:Справочник.Комментарии || Сообщения.ID)) 


Цитата:
Ошибка подстановки текстового параметра Справочник.Комментарии - Неизвестный параметр
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #11 - 24. Декабря 2008 :: 15:00
Печать  
Код
Выбрать все
(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (Форумы.ПоследнееСообщение = (:ВидСправочника.Комментарии || Сообщения.ID))  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #12 - 24. Декабря 2008 :: 15:03
Печать  
Извини, не догоняю. Покажь пример, плиз...
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #13 - 24. Декабря 2008 :: 18:30
Печать  
blindvic писал(а) 24. Декабря 2008 :: 15:03:
Извини, не догоняю. Покажь пример, плиз...

ну прям ту строчку, которую я тебе дал, вставляй вместо своей. Вроде должно работать.
П.С. всё аналогично вот этому: http://www.1cpp.ru/docum/icpp/html/ODBC.html#id32
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #14 - 24. Декабря 2008 :: 19:10
Печать  
Работает, но этот вариант, почему-то намного (15 сек против 1 сек) медленнее первого:
Цитата:
SELECT
Форумы.Descr [Наименование :Справочник.Форумы],
Форумы.Проблема [Проблема :Справочник],
Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
FROM
Справочник_Форумы Форумы, Справочник_Комментарии Сообщения
WHERE
(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (Форумы.ПоследнееСообщение = (' 8BM' || Сообщения.ID))
ORDER BY ДатаПослСообщения DESC
LIMIT 0,15
Подбор индекса для таблицы SC13073:
     Ограничения: ISMARK=;
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9988
Подбор индекса для таблицы SC10786:
     Ограничения: ISMARK=;
     Упорядочить: SP11659[ДатаВремяСоздания] desc,
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9988
Подбор индекса для таблицы SC10786:
     Ограничения: ISMARK=;
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9988
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #15 - 25. Декабря 2008 :: 07:23
Печать  
Отбор на "Форумы.ПоследнееСообщение" стоит?
Можешь писать запрос через JOIN. Как-то привычнее, хотя это дело привычки
Код
Выбрать все
SELECT
Форумы.Descr [Наименование :Справочник.Форумы],
Форумы.Проблема [Проблема :Справочник],
Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
FROM
Справочник_Форумы Форумы
LEFT JOIN Справочник_Комментарии Сообщения ON ((:ВидСправочника.Комментарии || Сообщения.ID)=Форумы.ПоследнееСообщение)
WHERE
(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
ORDER BY ДатаПослСообщения DESC 


Какой именно JOIN тебе нужен LEFT или INNER я не знаяю.

А что давала отладка на прдыдущий вариант запроса?
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #16 - 25. Декабря 2008 :: 07:33
Печать  
Цитата:
SELECT
Форумы.Descr [Наименование :Справочник.Форумы],
Форумы.Проблема [Проблема :Справочник],
Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
FROM
Справочник_Форумы Форумы, Справочник_Комментарии Сообщения
WHERE
(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
ORDER BY ДатаПослСообщения DESC
LIMIT 0,15
create table x(
ID char(9) collate _1C
,CODE char(9) collate _1C
,DESCR char(25) collate _1C
,ISMARK char(1) collate _1C
,VERSTAMP char(6) collate _1C
,Проблема char(13) collate _1C
,ДатаВозникновения char(8)
,ПоследнееСообщение char(13) collate _1C
, idx_ID char(9) collate _1C
, idx_CODE char(9) collate _1C
, idx_DESCR char(25) collate _1C
, idx_Проблема_DESCR char(38) collate _1C
)
create table x(
ID char(9) collate _1C
,CODE char(5) collate _1C
,ISMARK char(1) collate _1C
,VERSTAMP char(6) collate _1C
,Автор char(9) collate _1C
,ДатаВремяИзменения char(14) collate _1C
,ДатаВремяСоздания char(14) collate _1C
,КолвоИзменений numeric(3, 0)
,Корень char(9) collate _1C
,Объект char(13) collate _1C
,Решение char(23) collate _1C
,TSP10782 char(3) collate _1C
,ТвердостьРешения numeric(3, 0)
,Комментарий text collate _1C
, idx_ID char(9) collate _1C
, idx_CODE char(5) collate _1C
, idx_Объект_CODE char(18) collate _1C
)
Подбор индекса для таблицы SC13073:
     Ограничения: ISMARK=;
     В кэше не найдено
     Индекс не выбран.
     Стоимость: 9988
Подбор индекса для таблицы SC10786:
     Ограничения: ISMARK=;
     Упорядочить: SP11659[ДатаВремяСоздания] desc,
     В кэше не найдено
     Индекс не выбран.
     Стоимость: 9988
Подбор индекса для таблицы SC10786:
     Ограничения: ISMARK=; ID=;
     В кэше не найдено
     Выбран индекс IDD: ID
     Стоимость: 12

Отбор не стоит. Щас поставлю и потестю

Установил отбор - никакого улучшения
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #17 - 25. Декабря 2008 :: 08:06
Печать  
А такой запрос что теперь показывает в отладке:
Код
Выбрать все
SELECT
Форумы.Descr [Наименование :Справочник.Форумы],
Форумы.Проблема [Проблема :Справочник],
Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
FROM
Справочник_Форумы Форумы
INNER JOIN Справочник_Комментарии Сообщения ON (Форумы.ПоследнееСообщение =(:ВидСправочника.Комментарии || Сообщения.ID))
WHERE
(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
ORDER BY ДатаПослСообщения DESC  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #18 - 25. Декабря 2008 :: 08:47
Печать  
Цитата:
SELECT
Форумы.Descr [Наименование :Справочник.Форумы],
Форумы.Проблема [Проблема :Справочник],
Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
FROM
Справочник_Форумы Форумы
INNER JOIN Справочник_Комментарии Сообщения ON (Форумы.ПоследнееСообщение =(' 8BM' || Сообщения.ID))
WHERE
(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
ORDER BY ДатаПослСообщения DESC
LIMIT 0,15
Подбор индекса для таблицы SC13073:
     Ограничения: ISMARK=;
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9988
Подбор индекса для таблицы SC10786:
     Ограничения: ISMARK=;
     Упорядочить: SP11659[ДатаВремяСоздания] desc,
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9988
Подбор индекса для таблицы SC10786:
     Ограничения: ISMARK=;
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9988
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #19 - 25. Декабря 2008 :: 09:36
Печать  
Да, sqlite не выбирает индекса при таком построении запроса  Печаль
Млин, сдаюсь. Может ещё кто-то подскажет.
Единственное, что приходит на ум, это в спр-ке Форумы добавить реквизит с отбором "ВидСправочникаСообщений", куда бы записывался вид справочника сообщений в формате ИБ. Затем в запросе делать JOIN по
Код
Выбрать все
ON (Форумы.ВидСправочникаСообщений = :ВидСправочника.Комментарии) AND (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID) 


но как-то не шибко красиво получается.

или пробуй через ОЛЕДБ.
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #20 - 25. Декабря 2008 :: 10:08
Печать  
ок. спасибо за помощь. большей частью проблему решил.
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite [част. решено]
Ответ #21 - 26. Декабря 2008 :: 14:49
Печать  
Код
Выбрать все
|SELECT
|Форумы.Descr [Наименование :Справочник.Форумы],
|Форумы.Проблема [Проблема :Справочник],
|Сообщения.ДатаВремяСоздания [ДатаПослСообщения], 1 [ТипПроблемы]
|FROM
|Справочник_Форумы Форумы
|INNER JOIN Справочник_Комментарии Сообщения ON (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
|WHERE
|(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
|
|UNION
|
|SELECT
|Форумы.Descr [Наименование :Справочник.Форумы],
|Форумы.Проблема [Проблема :Справочник],
|Сообщения.ДатаВремяСоздания [ДатаПослСообщения], 2 [ТипПроблемы]
|FROM
|Справочник_Форумы Форумы
|INNER JOIN Справочник_УсилияЗадачи2 Сообщения ON (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
|WHERE
|(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
|
|ORDER BY ДатаПослСообщения DESC 


Данный код делает выборку из Справочника форумы, сортируя записи по дате Форумы.ПоследнееСообщение.ДатаВремяСоздания.
Форумы.ПоследнееСообщение - справочник неопредленного вида. На данный момент в моей базе он бывает двух видов: Справочник.Комментарии и Справочник.УсилияЗадачи2.
Если вдруг Форумы.ПоследнееСообщение будет ссылаться в будущем на справочники и других видов, запрос придется переделывать соответственно, делая UNION столько раз, сколько видов справочников в Форумы.ПоследнееСообщение. Есть ли универсальный способ решить эту проблему?
Спасибо.
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite [част. решено]
Ответ #22 - 26. Декабря 2008 :: 15:24
Печать  
И еще проблема. Запрос вроде бы работает, но есть проблема.
Код
Выбрать все
|SELECT
|Форумы.Проблема [Проблема :Справочник],
|Форумы.ПоследнееСообщение [ПоследнееСообщение :Справочник],
|Сообщения.ДатаВремяСоздания [ДатаПослСообщения], 1 [ТипПроблемы]
|FROM
|Справочник_Форумы Форумы
|INNER JOIN Справочник_Комментарии Сообщения ON (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
|WHERE
|(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
|
|UNION
|
|SELECT
|Форумы.Проблема [Проблема :Справочник],
|Форумы.ПоследнееСообщение [ПоследнееСообщение :Справочник],
|Сообщения.ДатаВремяСоздания [ДатаПослСообщения], 2 [ТипПроблемы]
|FROM
|Справочник_Форумы Форумы
|INNER JOIN Справочник_УсилияЗадачи2 Сообщения ON (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
|WHERE
|(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
|
|ORDER BY ДатаПослСообщения DESC 


Смотрите вложение.
Форумы.Проблемы - тоже справочник неопр. вида.
Вторая строка: ТипПроблемы=2, дата/время посл. сообщения верная, но само сообщение (3402) - не то (должно быть вида УсилияЗадачи2, а на самом деле - вида Комментарии). Что-то не так в моем запросе с точки зрения типизации.
  

query.PNG ( 3 KB | Загрузки )
query.PNG
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом на 1sqlite [част. решено]
Ответ #23 - 26. Декабря 2008 :: 18:48
Печать  
Так
Код
Выбрать все
(SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID) 


джойнить в твоём случае нельзя, т.к. ID элементов справочников Комментарии и УсилияЗадачи2 могут быть одинаковыми.
Тебе надо выбирать либо ты делаешь джойн по:
Код
Выбрать все
Форумы.ПоследнееСообщение = :ВидСправочника.НужныйСправочник || Сообщения.ID 


но тут мы, как выяснили выше, не попадаем в индекс;
либо добавлять реквизит с видом справочника;
либо воспользоваться прямым доступом через ОЛЕДБ.

либо ещё кто-нибудь что-нибудь подскажет путное
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite [част. решено]
Ответ #24 - 27. Декабря 2008 :: 11:28
Печать  
Ступил.
blindvic писал(а) 26. Декабря 2008 :: 14:49:
Если вдруг Форумы.ПоследнееСообщение будет ссылаться в будущем на справочники и других видов, запрос придется переделывать соответственно, делая UNION столько раз, сколько видов справочников в Форумы.ПоследнееСообщение. Есть ли универсальный способ решить эту проблему?
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Проблема с запросом на 1sqlite
Ответ #25 - 29. Декабря 2008 :: 16:22
Печать  
Переделал
Код
Выбрать все
SELECT
Форумы.Descr [Наименование :Справочник.Форумы],
Форумы.Проблема [Проблема :Справочник],
Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
FROM
Справочник_Форумы Форумы
INNER JOIN Справочник_Комментарии Сообщения ON (Форумы.ПоследнееСообщение =(:ВидСправочника.Комментарии || Сообщения.ID))
WHERE
(Форумы.IsMark = '') AND (Сообщения.IsMark = '')
ORDER BY ДатаПослСообщения DESC  


на
Код
Выбрать все
|SELECT
|Форумы.Descr [Наименование :Справочник.Форумы],
|Форумы.Проблема [Проблема :Справочник],
|Сообщения.ДатаВремяСоздания [ДатаПослСообщения]
|FROM
|Справочник_Форумы Форумы, Справочник_Комментарии Сообщения
|WHERE
|(Форумы.IsMark = '') AND (Сообщения.IsMark = '') AND (SUBSTR(Форумы.ПоследнееСообщение, 1, 4) = :ВидСправочника.Комментарии) AND (SUBSTR(Форумы.ПоследнееСообщение,5,9) = Сообщения.ID)
|ORDER BY ДатаПослСообщения DESC 


теперь все быстро
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать