Автор Тема: Ресурсы и запросы к б.д.  (Прочитано 7824 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Wolf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« : 10 Декабря 2003, 03:44:59 »
$i 0;
while (
true)
{
   
$result =  mysql_query("SELECT * FROM tab LIMIT $i*500, 500");
   if (!
$result) break;
   
$i++;
    
//действия
}

Таким образом данные выбираются по частям. Вопросы:
1. Имеет ли вообще смысл такой выбор? Можел лучше выбирать все записи?
2. При присвоении указателя переменной $result происходит ли слежение за этим указателем? Т.е. если переменной присваивается новый указатель на результат, то происходит ли освобождение памяти задействованное при прошлом запросе?
3. Чтобы не писать в другом разделе... Можно ли только средствами MySQL сделать изменения в записях, содержащее значения допустим: 0, 1, 2, 5, 8 сделать по нарастанию: 0, 1, 2, 3, 4 соответственно?
Век живи, век учись!:)

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
Ресурсы и запросы к б.д.
« Ответ #1 : 10 Декабря 2003, 09:17:16 »
Либо я ещё не проснулся, либо у тебя, если запрос хоть один раз выполнится, то будет выполняться всегда (не то условие для break).
Зачем на странице, где нужны все данные, выбирать их частями - я тоже не понял.
По пункту 3 - по-моему, тебе сюда - http://tony2001.phpclub.net/faq/mysql.auto_increment.html .

Оффлайн Mаster

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://code.msk.ru/
Ресурсы и запросы к б.д.
« Ответ #2 : 10 Декабря 2003, 10:56:52 »
КОШМАР.
Зачем дергать сервер несколько раз на идентичные процедуры?
Если можно взять все за 1 раз!
Дурак учится на своих ошибках, умный на чужих.
умные учатся у дураков

Оффлайн Wolf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« Ответ #3 : 10 Декабря 2003, 13:41:20 »
Спасибо за ответ. Насчет 1 пункта мне было интересно.
if (!$result) break;
Да, с этим условием я прогнал.

http://tony2001.phpclub.net/faq/mys..._increment.html .
Не открывается, это только у меня? Т.к. сервак определяется, но пинги до него не доходят. Трасса доходит до 22 прыжка и все.
(IP: 69.50.210.234, а трасса доходит до: 162.42.145.2, после чего - Request timed out)

Если по этой ссылке статья про то, что для id записи лучше использовать auto_increment и так его и оставлять (для того, чтобы информация всегда была на своем месте, то для id я упорядочивать не собираюсь).
Мне это нужно для веса страницы, т.е. по ней будет формироваться порядок вывода и через некоторое время там будут (могут) появляться дыры. Так вот упорядочивание для такого дела можно делать раз в пару месяцев. Вот и интересует можно ли это сделать средствами MySQL или делать с помощью PHP?

И 2й вопрос - кто-то может на него ответить?
« Последнее редактирование: 10 Декабря 2003, 13:49:13 от Wolf »
Век живи, век учись!:)

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
Ресурсы и запросы к б.д.
« Ответ #4 : 10 Декабря 2003, 13:49:49 »
Не открывается ссылка временно...

>> статья про то, что...
Да, про это.

>> Мне это нужно для веса страницы, т.е. по ней будет формироваться порядок вывода
Так хорошо, что дыры - иногда ведь и "между" вставлять надо.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« Ответ #5 : 10 Декабря 2003, 13:50:45 »
на второй вопрос тебе ответит мануал.
mysql_free_result()

А на третий у мегя есть свой вопрос. А чем тебе не нравятся дырки в цифрах?

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Ресурсы и запросы к б.д.
« Ответ #6 : 10 Декабря 2003, 13:59:27 »
это скорее всего не цифры а id. а если ряд удалили - то все прально должна быть дырка.
если надо обращаться к ряду по порядковому номеру, то для этого не надо держать специальное поле. для этого есть LIMIT
ну, будем исповедоваться?

Оффлайн Wolf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« Ответ #7 : 10 Декабря 2003, 16:08:15 »
Наверное стоит написать структуру этой таблицы:
mysql_query("CREATE TABLE structure(
	
id int(
$index_structure) unsigned NOT NULL auto_increment,
	
lft int(
$index_structure) unsigned NOT NULL default 1,
	
rgt int("
.($index_structure+1).") unsigned NOT NULL default 2,
	
weight int(
$index_structure) unsigned,
	
caption varchar(120),
	
overview int(
$index_main) unsigned NOT NULL default 0,
	
dir_name varchar(23),
	
content_link tinyint unsigned NOT NULL,
	
PRIMARY KEY (struct_id),
	
INDEX (lft),
	
INDEX(rgt)
	
)"
$conn);

Там поле id так и будет. А вот weight - это поле для сортировки по нему (ORDER BY weight). Вот в нем я и хочу временами (редко но всеже) устраивать ревизию. Это поле меняется в сценарии автоматически при добавлении новой записи (большее в данном логическом разделе + 1) или при указании пользователя т.е. данный раздел перевести выше/ниже.
Да, только что понял, что задача сложнее - нужно сортировать по нарастанию в каждом разделе.
Ну так если не брать во внимание, что дырки это хорошо, можно сделать?
Век живи, век учись!:)

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Ресурсы и запросы к б.д.
« Ответ #8 : 10 Декабря 2003, 16:27:35 »
[off] уточняющий вопрос: У тебя таблица по алгоритму Nested Sets организована, что ли ? (поля lft, rgt) [/off]
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Wolf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« Ответ #9 : 10 Декабря 2003, 17:24:53 »
[OFF]Точно я не знаю, но в описания метода написано: Modified Preorder Tree Traversal. А где про Nested Sets можно прочитать?[.OFF]
Век живи, век учись!:)

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Ресурсы и запросы к б.д.
« Ответ #11 : 10 Декабря 2003, 18:03:37 »
например здесь
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Wolf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« Ответ #12 : 10 Декабря 2003, 20:45:08 »
Спасибо! С http://detail.phpclub.net/article/db_tree я начал поиск. Думал сначала делать рекурсией, но и самому не очень нравилось. Потом прочитал эту статью (http://www.sitepoint.com/print/1105). Как мне кажется этот метод значительно лучше. Сейчас посмотрю что там еще за 2 метода...
Спасибо огромное еще раз!
Век живи, век учись!:)

Оффлайн Wolf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ресурсы и запросы к б.д.
« Ответ #13 : 11 Декабря 2003, 14:09:03 »
Может кто-то подсказать как можно в алгоритме Nested Sets выбрать только 1 уровень?
Век живи, век учись!:)

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Ресурсы и запросы к б.д.
« Ответ #14 : 11 Декабря 2003, 14:17:53 »
Wolf
там поле в таблице level должно быть...
работа в Украине

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28