Новости
Документация
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

> Original message text:
> 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о может можно как-то попроще?
>
> Есть мысли?
>
>


From: vitek - 22/02/2002 - 04:32:29
Subject:Номер записи. Как?
-----------------
Огромное спасибо. Мысль просто отличная.
Буду по мере возможности использовать.

Но вот есть страх...
(если уж пошла такая тема, то лучше может ты объяснишь, чем мне читать мануал - время, время, время)

Насколько накладно создавать временные таблицы?
Я так понимаю они в памяти создаются или могут и на диске?
Просто есть небольшой страх, что это скушает много памяти, так как таблицы планируются быть достаточно большими. Именно поэтому я и выдаю юзеру всё блоками. MySQL локально под Win32. И машина - не дай бог тебе такую увидеть :-(

В любом случае - спасибо. Багаж знаний пополнился :-)



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

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

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



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