Forum Webscript.Ru
Программирование => PHP => Тема начата: 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 соответственно?
-
Либо я ещё не проснулся, либо у тебя, если запрос хоть один раз выполнится, то будет выполняться всегда (не то условие для break).
Зачем на странице, где нужны все данные, выбирать их частями - я тоже не понял.
По пункту 3 - по-моему, тебе сюда - http://tony2001.phpclub.net/faq/mysql.auto_increment.html .
-
КОШМАР.
Зачем дергать сервер несколько раз на идентичные процедуры?
Если можно взять все за 1 раз!
-
Спасибо за ответ. Насчет 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й вопрос - кто-то может на него ответить?
-
Не открывается ссылка временно...
>> статья про то, что...
Да, про это.
>> Мне это нужно для веса страницы, т.е. по ней будет формироваться порядок вывода
Так хорошо, что дыры - иногда ведь и "между" вставлять надо.
-
на второй вопрос тебе ответит мануал.
mysql_free_result()
А на третий у мегя есть свой вопрос. А чем тебе не нравятся дырки в цифрах?
-
это скорее всего не цифры а id. а если ряд удалили - то все прально должна быть дырка.
если надо обращаться к ряду по порядковому номеру, то для этого не надо держать специальное поле. для этого есть LIMIT
-
Наверное стоит написать структуру этой таблицы:
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) или при указании пользователя т.е. данный раздел перевести выше/ниже.
Да, только что понял, что задача сложнее - нужно сортировать по нарастанию в каждом разделе.
Ну так если не брать во внимание, что дырки это хорошо, можно сделать?
-
[off] уточняющий вопрос: У тебя таблица по алгоритму Nested Sets организована, что ли ? (поля lft, rgt) [/off]
-
[OFF]Точно я не знаю, но в описания метода написано: Modified Preorder Tree Traversal. А где про Nested Sets можно прочитать?[.OFF]
-
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
-
например здесь (http://detail.phpclub.net/article/db_tree)
-
Спасибо! С 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 метода...
Спасибо огромное еще раз!
-
Может кто-то подсказать как можно в алгоритме Nested Sets выбрать только 1 уровень?
-
Wolf
там поле в таблице level должно быть...
-
В смысле - parent? Я так понял эта реализация хороша для показа всего дерева и для вывода пути от данного элемента вверх, но вот с выводом 1 уровня проблема возникает.
-
Wolf
зависит от реализации. Я например использую класс, описанный в статье, которую я предложил тебе выше. Он автоматически записывает еще и поле level (уровень вложенности узла), хотя это и избыточная информация, но помогает в таких случаях.
Я так понял эта реализация хороша для показа всего дерева и для вывода пути от данного элемента вверх,
имхо эта реализация позволяет за 1-2 запроса вывести почти любое, логически связанное множество узлов дерева. По крайней мере я не сталкивался со случаями когда для вывода множества понадобилось бы более 2-х запросов.
-
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. Каким образом ее лучше всего реализовывать - как еще одно поле или делать таблицу? Если учесть, что данная таблица (структуры) просматривается для каждого отображения страницы.
-
Grape
Каким образом ее лучше всего реализовывать - как еще одно поле или делать таблицу?
пару сообщений выше я давал ссылк на статью. В ней описана рекомендуемая структура таблица для реализации метода Nested Sets под mysql и объясняется почему именно такая структура рекомендуется.
-
Спасибо! Очень полезная инфа!