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

Поиск:

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


Эксперт
****


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

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



Red Dragon А он точно правильно работает?
Для твоего дампа он выдает 500, потом 34, потом 200... если это цифры, то как-то неправильно он сортирует... %(


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


Un salsero
Group Icon


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

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



Kesh, повидимому сортирует как строки.
smile
Всё таки надо отдельно хранить числа...


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


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


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

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



sergej.z
отдельно не могу, тогда мне нужно все данные хранить отдельно, а это в принципе не удобно, т.к. основная часть данных в формате XML
Добавлено @ 08:52
Kesh
кстати да smile он сортирует как строки... и как делать? Вот блин задачка, до упрощения ещё рановато




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


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


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

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



Цитата(Red @ 1.12.2005, 09:48)
он сортирует как строки... и как делать?

В MySQL есть как бы функция, преобразующая строку в число... используйте ее в order by.
Скажем ORDER BY CAST(qq AS UNSIGNED INTEGER)


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

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


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


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

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



Akina
спасибо, но запрос напроч отказывается работать с "qq", только полный запрос.. И теперь ещё больше упрощать нужно smile

вот
Код

SELECT `kabak`.name_kabak, SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) AS zen
           FROM `kabak`
           WHERE `index`=1 AND SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) <> ''
           ORDER BY CAST(SUBSTRING( `kabak`.inf, LOCATE( '<control>', `kabak`.inf ) +9, LOCATE( '</control>', `kabak`.inf ) - LOCATE( '<control>', `kabak`.inf ) -9 ) AS UNSIGNED INTEGER) "



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


Эксперт
***


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

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



Цитата(Red @ 30.11.2005, 21:08)
Bose
что-то всегда ноль даёт... Может потестите, дамп я скинул, а то я уже умаялся

Ноль.... Да... Переменные здесь не помогут smile
Цитата(MySQL @ 01.12.2005, 11:08)

Примечание: в команде SELECT каждое выражение оценивается только при отправлении клиенту. Это означает, что в условиях HAVING, GROUP BY, or ORDER BY не следует ссылаться на выражение, содержащее переменные, которые введены в части SELECT этой команды..
Действует правило никогда не создавать и не использовать одну и ту же переменную в одном и том же выражении SQL.


Red Dragon Честно говоря, я уже и не знаю как его упростить... Я бы наверное оставил как есть. Всё-таки, лучшее - враг хорошего. ;)
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 1.12.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Наверное придётся так и оставить...
может константы где-нибудь прописать, а потом их использовать smile всё же по короче код будет..


PS
ну тогда всем спасибо за мучения, может кто-нибудь придумает что-то оптимальное


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


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


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

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



Цитата(Red @ 1.12.2005, 12:11)
запрос напроч отказывается работать с "qq", только полный запрос

В качестве бреда (напоминаю - пробовать негде) попробуй крокодила типа вот такого:

Код

SELECT * 
FROM
(
  SELECT Q1.name_kabak, SUBSTRING(Q1.inf,Q1.a+9,Q1.b-Q1.a-9) AS qq
  FROM
  (
    SELECT  kabak.name_kabak,  kabak.inf, INSTR(kabak.inf,"<control>") AS a,  INSTR(kabak.inf,"</control>") AS b
    FROM `kabak`
  ) AS Q1
  WHERE (Q1.a > 0) AND (Q1.b>Q1.a)
) AS Q2
ORDER BY CAST(Q2.qq AS UNSIGNED INTEGER) DESC



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

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


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


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

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



Akina
а бред то работает!!!!! Буду тестить
Добавлено @ 09:53
вот еслиб ты ещё на словах объяснил принцип работы, цены бы тебе не было smile Я просто немного с простыми запросами разобрался, а вот с вложенными - smile


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


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


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

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



Цитата(Red @ 2.12.2005, 10:52)
еслиб ты ещё на словах объяснил принцип работы

Запросто. Берем самый внутренний запрос:
Код

SELECT  kabak.name_kabak,  kabak.inf, INSTR(kabak.inf,"<control>") AS a,  INSTR(kabak.inf,"</control>") AS b
FROM `kabak`

Как видишь, он делает выборку, в кою входят: kabak.name_kabak, kabak.inf, а также позиции "<control>" и "</control>" в поле kabak.inf. Т.е. просто подготавливает нам данные для дальнейшей обработки.
Его результат - полученная выборка - получает имя Q1.

Берем обрамляющий запрос.

Код

SELECT Q1.name_kabak, SUBSTRING(Q1.inf,Q1.a+9,Q1.b-Q1.a-9) AS qq
FROM Q1
WHERE (Q1.a > 0) AND (Q1.b>Q1.a)

Этот запрос отбирает те записи, в коих присутствует пара тегов, причем в правильном порядке, и вырезает подстроку меж ними в поле qq.
Его результат - полученная выборка - получает имя Q2.

И теперь внешний запрос

Код

SELECT * 
FROM Q2
ORDER BY CAST(Q2.qq AS UNSIGNED INTEGER) DESC

Он просто выполняет сортировку результатов в желаемом порядке - т.е. qq преобразуется в число и сортируется по убыванию.

Все.

Собсно именно так он и писАлся - сперва внутренний запрос, потом вокруг него средний, потом внешний.


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

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


 




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


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

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