Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как упростить запрос 
:(
    Опции темы
Gold Dragon
  Дата 29.11.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



смысл такой.. В базе есть записи, в которых может содержаться <control>...<.control>
запрос проверяет наличие записи и делает выборку содержимого. Но это уж очень страшно выглядящий запрос smile как упростить

Код

SELECT `kabak`.name_kabak, SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) AS qq
FROM `kabak`
WHERE SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) <> ''
ORDER BY qq DESC




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Akina
Дата 29.11.2005, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Цитата(Red @ 29.11.2005, 17:57)
В базе есть записи, в которых может содержаться <control>...</control>

А наоборот - </control>...<control> - может быть?



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 30.11.2005, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(Akina @ 29.11.2005, 20:36)
А наоборот - </control>...<control> - может быть?
Нет конечно, данные храняться в XML smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Akina
Дата 30.11.2005, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Код
SELECT name_kabak, SUBSTRING(inf,a+9,b-a-9) AS qq
(
   SELECT name_kabak, inf, INSTR(inf,'<control>') AS a,  INSTR(inf,'</control>') AS b
   FROM `kabak`
   WHERE (a > 0) AND (b>a)
)
ORDER BY qq DESC



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
GoodBoy
Дата 30.11.2005, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Akina
В MySQL - НЕТ вложенных запросов!!!!


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Kesh
Дата 30.11.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



GoodBoy смотря в какой версии...
Добавлено @ 10:46
Red Dragon кинь дамп..., плиз...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 30.11.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Akina
Цитата
Ответ MySQL: Документация
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(  SELECT name_kabak , inf , INSTR( inf , '<control>' ) AS a , I



Добавлено @ 11:20
Код

CREATE TABLE `kabak` (
  `id` int(11) NOT NULL auto_increment,
  `name_kabak` varchar(255) NOT NULL default '',
  `inf` text NOT NULL,
  `id_area` int(11) NOT NULL default '0',
  `id_street` int(11) NOT NULL default '0',
  `dom` tinyint(4) NOT NULL default '0',
  `index` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)

INSERT INTO `kabak` VALUES (1, 'Что-то', '<control>500</control>', 0, 0, 0, 1);
INSERT INTO `kabak` VALUES (2, 'Что-то', '<control>200</control>', 0, 0, 0, 1);
INSERT INTO `kabak` VALUES (3, 'Что-то', '<control>34</control>', 0, 0, 0, 1);
INSERT INTO `kabak` VALUES (4, 'Тест', 'текст', 0, 0, 0, 1);


Добавлено @ 11:21
у меня версия MySQL 4.1.8


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Akina
Дата 30.11.2005, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



О! ошибка нашлась... а разобраться что именно не нравится, а?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 30.11.2005, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Akina
ни чего не понял что ты сказал smile
Какая ошибка?

и это что значит?
Цитата(Akina @ 30.11.2005, 12:00)
а разобраться что именно не нравится, а?
smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Bose
Дата 30.11.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 1
Всего: 51



Цитата(Akina @ 30.11.2005, 09:53)

Код
SELECT name_kabak, SUBSTRING(inf,a+9,b-a-9) AS qq    
(    
   SELECT name_kabak, inf, INSTR(inf,'<control>') AS a,  INSTR(inf,'</control>') AS b    
   FROM `kabak`    
   WHERE (a > 0) AND (b>a)    
)    
ORDER BY qq DESC


Akina что это за конструкция, и как она может работать??? Каким образом вложенный запрос связан с основным? Раз нет запятой после AS qq, то подзапрос явно не является частью "внешнего" SELEСTа... И FROM где потерялся??? Или у тебя ошибка или в MySQL можно строить такие запросы, про которые я и не подозревал smile
PM MAIL WWW Skype   Вверх
Akina
Дата 30.11.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Цитата(Bose @ 30.11.2005, 15:55)
что это за конструкция, и как она может работать??? Каким образом вложенный запрос связан с основным?

О господи! ну опечатка, забыл FROM... ну не до такой же степени...

Код

SELECT name_kabak, SUBSTRING(inf,a+9,b-a-9) AS qq
FROM
(
   SELECT name_kabak, inf, INSTR(inf,'<control>') AS a,  INSTR(inf,'</control>') AS b
   FROM `kabak`
   WHERE (a > 0) AND (b>a)
)
ORDER BY qq DESC


Нет у меня сейчас Мускула, нет... а вот в таком виде:

Код

SELECT * 
FROM
(
  SELECT name_kabak, MID(inf,a+9,b-a-9) AS qq
  FROM
  (
    SELECT  name_kabak,  inf, INSTR(inf,"<control>") AS a,  INSTR(inf,"</control>") AS b
    FROM `kabak`
  )
  WHERE (a > 0) AND (b>a)
)
ORDER BY qq DESC


его даже MS Access переварил!



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 30.11.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



вот что пишет MySQL
Код

Ответ MySQL: Документация
#1248 - Every derived table must have its own alias 


Добавлено @ 16:20

Bose
может попробуешь сделать


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 30.11.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Код

SELECT `kabak`.name_kabak, SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) AS qq
FROM `kabak`
WHERE qq <> ''
ORDER BY qq DESC

Во первых я бы так попробовал...
Добавлено @ 16:29
А вообще я бы ту цифру в отдельном поле хранил, раз часто с ней работаешь..


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Bose
Дата 30.11.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 1
Всего: 51



Цитата(Akina @ 30.11.2005, 15:42)
О господи! ну опечатка, забыл FROM... ну не до такой же степени...

Mysql я занимаюсь совсем недавно, поэтому удивился и подумал, что мало ли, может Мускул имеет какой-то свой формат сокращеных запросов smile

Цитата(sergej @ 30.11.2005, 16:28)
WHERE qq <> ''
к сожалению Мускул не принимает алиасы столбцов в условии WHERE, ибо, как сказано на оффсайте, значение столбца qq может быть неизвестно на момент выполнения условия WHERE. В 4й версии по крайней мере... Про 5ую не знаю...

Red Dragon, мне кажется, что если скорость выполнения запроса тебя устраивает, то пускай всё так и остаётся... smile
С другой стороны я вот вспомнил про переменные пользователя в Mysql... Мне кажется, что именно их здесь и стоит использовать. Хотя я сам лично, никогда их не применял, и наверняка оставил бы запрос как есть smile Тем более, что Mysql наверняка оптимизирует этот запрос, и вычисляет substring только 1 раз...

должно получиться что-то вроде:
Код

SELECT `kabak`.name_kabak, @qqq:=SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) AS qq    
FROM `kabak`    
WHERE @qqq <> ''    
ORDER BY qq DESC


Это сообщение отредактировал(а) Bose - 30.11.2005, 17:48
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 30.11.2005, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Bose
что-то всегда ноль даёт... Может потестите, дамп я скинул, а то я уже умаялся


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1748 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.