Forum Webscript.Ru

Программирование => PHP => Тема начата: Wolf от 10 Декабря 2003, 03:44:59

Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 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 от 10 Декабря 2003, 09:17:16
Либо я ещё не проснулся, либо у тебя, если запрос хоть один раз выполнится, то будет выполняться всегда (не то условие для break).
Зачем на странице, где нужны все данные, выбирать их частями - я тоже не понял.
По пункту 3 - по-моему, тебе сюда - http://tony2001.phpclub.net/faq/mysql.auto_increment.html .
Название: Ресурсы и запросы к б.д.
Отправлено: Mаster от 10 Декабря 2003, 10:56:52
КОШМАР.
Зачем дергать сервер несколько раз на идентичные процедуры?
Если можно взять все за 1 раз!
Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 10 Декабря 2003, 13:41:20
Спасибо за ответ. Насчет 1 пункта мне было интересно.
if (!$result) break;
Да, с этим условием я прогнал.

http://tony2001.phpclub.net/faq/mys..._increment.html . (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й вопрос - кто-то может на него ответить?
Название: Ресурсы и запросы к б.д.
Отправлено: tserbis от 10 Декабря 2003, 13:49:49
Не открывается ссылка временно...

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

>> Мне это нужно для веса страницы, т.е. по ней будет формироваться порядок вывода
Так хорошо, что дыры - иногда ведь и "между" вставлять надо.
Название: Ресурсы и запросы к б.д.
Отправлено: Меняздесьдавнонет от 10 Декабря 2003, 13:50:45
на второй вопрос тебе ответит мануал.
mysql_free_result()

А на третий у мегя есть свой вопрос. А чем тебе не нравятся дырки в цифрах?
Название: Ресурсы и запросы к б.д.
Отправлено: AliMamed от 10 Декабря 2003, 13:59:27
это скорее всего не цифры а id. а если ряд удалили - то все прально должна быть дырка.
если надо обращаться к ряду по порядковому номеру, то для этого не надо держать специальное поле. для этого есть LIMIT
Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 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) или при указании пользователя т.е. данный раздел перевести выше/ниже.
Да, только что понял, что задача сложнее - нужно сортировать по нарастанию в каждом разделе.
Ну так если не брать во внимание, что дырки это хорошо, можно сделать?
Название: Ресурсы и запросы к б.д.
Отправлено: Макс от 10 Декабря 2003, 16:27:35
[off] уточняющий вопрос: У тебя таблица по алгоритму Nested Sets организована, что ли ? (поля lft, rgt) [/off]
Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 10 Декабря 2003, 17:24:53
[OFF]Точно я не знаю, но в описания метода написано: Modified Preorder Tree Traversal. А где про Nested Sets можно прочитать?[.OFF]
Название: Ресурсы и запросы к б.д.
Отправлено: tserbis от 10 Декабря 2003, 18:00:48
Four ways to work with hierarchical data
http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html?format=print

Storing Hierarchical Data in a Database
http://www.sitepoint.com/print/1105

Trees in SQL
http://www.intelligententerprise.com/001020/celko1_1.shtml
Название: Ресурсы и запросы к б.д.
Отправлено: Макс от 10 Декабря 2003, 18:03:37
например здесь (http://detail.phpclub.net/article/db_tree)
Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 10 Декабря 2003, 20:45:08
Спасибо! С http://detail.phpclub.net/article/db_tree (http://detail.phpclub.net/article/db_tree) я начал поиск. Думал сначала делать рекурсией, но и самому не очень нравилось. Потом прочитал эту статью (http://www.sitepoint.com/print/1105 (http://www.sitepoint.com/print/1105)). Как мне кажется этот метод значительно лучше. Сейчас посмотрю что там еще за 2 метода...
Спасибо огромное еще раз!
Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 11 Декабря 2003, 14:09:03
Может кто-то подсказать как можно в алгоритме Nested Sets выбрать только 1 уровень?
Название: Ресурсы и запросы к б.д.
Отправлено: Yukko от 11 Декабря 2003, 14:17:53
Wolf
там поле в таблице level должно быть...
Название: Ресурсы и запросы к б.д.
Отправлено: Wolf от 11 Декабря 2003, 14:29:23
В смысле - parent? Я так понял эта реализация хороша для показа всего дерева и для вывода пути от данного элемента вверх, но вот с выводом 1 уровня проблема возникает.
Название: Ресурсы и запросы к б.д.
Отправлено: Макс от 11 Декабря 2003, 15:38:21
Wolf
зависит от реализации. Я например использую класс, описанный в статье, которую я предложил тебе выше. Он автоматически записывает еще и поле level (уровень вложенности узла), хотя это и избыточная информация, но помогает в таких случаях.

Цитировать
Я так понял эта реализация хороша для показа всего дерева и для вывода пути от данного элемента вверх,
имхо эта реализация позволяет за 1-2 запроса вывести почти любое, логически связанное множество узлов дерева. По крайней мере я не сталкивался со случаями когда для вывода множества понадобилось бы более 2-х запросов.
Название: Ресурсы и запросы к б.д.
Отправлено: Grape от 14 Декабря 2003, 16:28:01
Цитировать
Wolf:
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);


К данной таблице еще нужно поле с содержанием дирректории, его тип mediumtext. Каким образом ее лучше всего реализовывать - как еще одно поле или делать таблицу?  Если учесть, что данная таблица (структуры) просматривается для каждого отображения страницы.
Название: Ресурсы и запросы к б.д.
Отправлено: Макс от 14 Декабря 2003, 17:27:48
Grape
Цитировать
Каким образом ее лучше всего реализовывать - как еще одно поле или делать таблицу?
пару сообщений выше я давал ссылк на статью. В ней описана рекомендуемая структура таблица для реализации метода Nested Sets под mysql и объясняется почему именно такая структура рекомендуется.
Название: Ресурсы и запросы к б.д.
Отправлено: Grape от 14 Декабря 2003, 20:23:01
Спасибо! Очень полезная инфа!