Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Проблема с запросом на 1sqlite [част. решено] (число прочтений - 6925 )
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 записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать