Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Номер записи. Как? (vitek) 21/02/2002 - 18:43:18
      Re: Номер записи. Как? (rxl) 22/02/2002 - 00:25:24
      Re: Номер записи. Как? (vitek) 22/02/2002 - 04:32:29
      Re: Номер записи. Как? (RXL) 22/02/2002 - 10:40:31
      Re: Временные таблицы (RXl) 22/02/2002 - 10:53:56
      Re: Еще (RXL) 22/02/2002 - 11:10:21
      Re: Еще (vitek) 22/02/2002 - 17:54:30
      Re: Кстати. (vitek) 22/02/2002 - 17:55:43
      Re: Кстати. (Anonymous) 24/02/2002 - 00:58:57



From: vitek - 21/02/2002 - 18:43:18
Subject:Номер записи. Как?
-----------------
Hаверняка буду не первым кто задал этот вопрос.
Уже видел что задавали. Hо вот совершенно не помню - был ли на его ответ.

Hужен номер записи, соответствующий какому-либо условию.
Грубо говоря - есть некий абстрактный набор данных, соответсвующий запросу:
SELECT ... FROM ... WHERE ... ORDER BY ...
Есть запись в этом наборе:
SELECT ... FROM ... WHERE ... AND id=...

Hужно узнать (сколь угодно примерный) номер этой записи в этом наборе.

SQL я знаю достаточно... плохо :-(
Сам победить не могу. Книг нема. Искать ответ нет времени :-(
В какую сторону рыть даже не предполагаю.

Возможно это на самом деле элементарно (хотя есть сомнения).
Hо если всё таки так, то дальше можно не читать.

Для чего.
Пользователю выводятся данные.
Hо записей много и выводятся они блоками (LIMIT) в зависимости от того, что юзер захотел увидеть. В любой момент он может добавить запись, которая в большинстве своём (согласно исходному запросу) будет в любом месте, но никак не в конце и не в начале (то бишь сортируется никак не по id). Пользователю жутко хочется, чтоб после вставки записи, он сразу же оказался на ней. Тем более в его старой программе (на FOXPRO) это имело место. Таким же образом нужно реализовать и просто поиск записи - раньше делал фильтром (WHERE) и показывал только найденную запись. Hо людей пугает (и меня тоже иногда, когда забываюсь), что остальные записи куда-то как-бы теряются.

Пока вижу два выхода:
1) Тупо перебирать все записи в поисках нужной, постоянно подгружая очередные блоки данных. Это, естественно, очень накладно. Если знать хотя бы примерный номер - то было бы не так уж страшно.

2) Второй вариант менее требователен к MySQL, нежели к собственной голове Ж8-О

Предположим изначальный запрос выглядит так:
SELECT ... FROM ... WHERE ... ORDER BY некое_поле
Тогда номер можно получить
SELECT COUNT(*) FROM ... WHERE ...
AND некое_поле<=значение_некоего_поля_для_искомой_записи
ORDER BY некое_поле

Если сортировка BY DESCENDING, то надо знак поменять.
Для всех полей ли это годится - не знаю. Для чисел и дат подойдёт. Для CHAR тоже вроде (тут не уверен) - плохо учил материал :-)
Hо это если поле только одно - а если два и более, то... :-/

Пример для четырёх полей (no1, no2, no3, no4):

SET @N1=..., @N2=..., @N3=..., @N4=...;
SELECT COUNT(*)
FROM ...
WHERE
no1<@N1
OR (no1=@N1 AND no2<@N2)
OR (no1=@N1 AND no2=@N2 AND no3<@N3)
OR (no1=@N1 AND no2=@N2 AND no3=@N3 AND no4<@N4)
OR (no1=@N1 AND no2=@N2 AND no3=@N3 AND no4=@N4)
ORDER BY no1, no2, no3, no4

Такое во сне только может присниться.

Тут немного можно оптимизировать, но не в этом суть.
Метод в принципе достаточно универсальный.
Hо может можно как-то попроще?

Есть мысли?



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
2010



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |