Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2010, 16:05   #51
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Я тут подумал - сделаем проще...
Я на выходных накидаю Вам скрипты работы со статьями. Потом Вы накидаете свои скрипты. Проведём краш-тест и поймём кто прав.
Виталий Желтяков вне форума Ответить с цитированием
Старый 20.11.2010, 01:46   #52
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Скрипты подготовлены см. архив.
Ожидаю Вашего решения.
Вложения
Тип файла: rar holywar.rar (32.5 Кб, 10 просмотров)
Виталий Желтяков вне форума Ответить с цитированием
Старый 20.11.2010, 11:06   #53
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Скрипты подготовлены см. архив.
Ожидаю Вашего решения.
Для начала - немного конструктивной критики:

Попробуйте, при использовании вашего дампа БД, переименовать "Категория1" в "Категория1а", например....или любое другое название.
Боюсь вас разочаровывать - но это приведёт вас к тому же результату,который был в моём гипотетическом примере,который вас так повеселил в своё время...
Не удержусь от цитаты:
Цитата:
Вы вырыли яму, в которую сами же упали.
Сразу отмечу - при попытках переименовать некоторые другие Категории - происходит их переименование только в тех полях таблицы,которые на содержат данных с такими значениями.
Например "Категория11" -> "Категория11а" - изменения в полях ENUM произошли только в `category3`, `category4`, `category5` - в `category1`,`category2` наименование осталось прежним.

Трудно назвать такое решение корретным...?
При этом удивляет бодрый рапорт на странице, после неудавшегося переименования(ибо даже неполное переименование нельзя назвать "удачным", я уж не говорю про "Категорию1").
Так вот ваш скрипт при неудачах оптимистично рапортует "Категория изменена".

Естественно, у вас при изменении названия Категории не происходит соответствующее изменение в данных статей,которые относятся к редактируемой вами Категории.Это и понятно - в полях,которые уже содержат данные этой Категории изменить ничего нельзя.
Уточню для ясности(пример):
Статья <номер> ранее принадлежала "Категории1"
"Категория1" переименована(допустим) в "Категория1а" - соответственно в записи Статьи <номер> вместо "Категория1" должно стать "Категория1а" - это же логично!
Иначе в чём смысл редактирования названия Категории - если связи со статьями при этом теряются???
У вас этого не происходит - по причинам,указанным выше.

Простота и изящество вашего решения - всё более и более сомнительно,несмотря на его оригинальность.

Глубже пока не копал - нехватка времени.
Более подробный разбор вашего текущего варианта предоставлю завтра к вечеру - со временем просто беда,несмотря на выходные.
Удачи вам в ловле багов!

PS : просьба - для объективности - не изменяйте(не перезаливайте) этот вариант вашего кода.
При внесении новых изменений - пожалуйста размещайте новый архив в новом посте.Это позволит объективно сравнивать и отслеживать прогресс.Спасибо!
Andkorol вне форума Ответить с цитированием
Старый 20.11.2010, 21:52   #54
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Да, спасибо что нашли ошибку. Проблема проявляется только на первой категории в списки ("Категория1"). Попробуйте остальные - там всё замечательно работает.

Жду вашего варианта.
Виталий Желтяков вне форума Ответить с цитированием
Старый 21.11.2010, 14:17   #55
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Жду вашего варианта.
Я не буду писать код. Есть чем более важным занятся. Если хотите продолжить тему, задайте конкретный вопрос, я вам отвечу. Пока что, вы несмогли решить задачу которую я перед вами поставил (код я не увидил).
ssdm вне форума Ответить с цитированием
Старый 21.11.2010, 14:53   #56
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Я не буду писать код. Есть чем более важным занятся. Если хотите продолжить тему, задайте конкретный вопрос, я вам отвечу. Пока что, вы несмогли решить задачу которую я перед вами поставил (код я не увидил).
Я так и знал...
Решение задачи в моих скриптах. Но отмечу сразу, что оно отличается от той задачи, которую Вы мне предложили, ибо ваша задача бессмысленна и решить её корректно не сможет не один программист. Если же Вы этого не понимаете, то приведите своё решение этой задачи.
Виталий Желтяков вне форума Ответить с цитированием
Старый 21.11.2010, 14:59   #57
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Решение задачи в моих скриптах. Но отмечу сразу, что оно отличается от той задачи, которую Вы мне предложили, ибо ваша задача бессмысленна и решить её корректно не сможет не один программист. Если же Вы этого не понимаете, то приведите своё решение этой задачи.
select * from articles where id in (select distinct aticle_id from cat_at where cat_id in ( select id from categories where name in (<name_1>,...,<name_n>) ) ) , где name_i - название категории.

Выбрать статьи из определенного набора категорий - это бесмысленная задача ? Ради бога, не смешите людей. Зайдите что ли на новостной сайт любой.
А то что на ваших граблях это сложно решаемая задача, так я к этому и вёл ,что вы выбрали неверный подход изначально.
UPD:
Поправлюсь. Действительно, задача для поиска статей, где каждая статья принадлежит как минимум трем категориям ,не тривиальная. Так что делать это прийдется одинаково сложно что с вашим подходом, что с обыным. Вот код.
PHP код:
$mas=array(); 
$cnt=0;
foreach 
$l ($categories){
    
$res=mysql_query("select id from articles where id in (select distinct aticle_id from cat_at where cat_id in ( select id from categories where name =."mysql_escape_string($l)." ) )")
    while(
$row=mysql_fetch_assoc($res)){
      
$mas[$cnt][row['id']]=1;      
    }
    
$cnt++;
}
$temp=$mas[0];
if(
sizeof($mas)>1){
  for (
$num=1;$num<sizeof($mas);$num++){
     
$temp=array_intersect_key($temp,$mas[$num]);
  }
}
Ключи массива $temp id'шки статей. 
Завтра подумаю как в SQL запрос все завернуть.

Последний раз редактировалось ssdm; 21.11.2010 в 16:38. Причина: Дополнил + корректировки.
ssdm вне форума Ответить с цитированием
Старый 21.11.2010, 15:13   #58
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Проблема проявляется только на первой категории в списки ("Категория1"). Попробуйте остальные - там всё замечательно работает.
1.Вы считаете,что раз "Проблема проявляется только на первой категории в списки" - то всё ОК,всё работает корректно???
Ничего исправлять не нужно - и так сойдёт?

2.Вы мой пост внимательно читали???
Как насчёт "Категории11" -> "Категория11а"??? - там изменения происходят только в `category3`, `category4`, `category5` - а `category1` и `category2`(значения которых уже заполнены в некоторых записях "Категорией11") - данные в ENUM-полях остаются без изменения(т.е. в них по-прежнему стоят значения "Категория11").
Это по-вашему "всё замечательно работает"???
"Категория13", как и многие другие, могут также вас удивить.

3.Я так понимаю - ошибки в своих скриптах вы исправлять не собираетесь.
Значит и проблема сохранения связей между Категорией и статьями после редактирования названия Категории осталась - вы также не смогли её решить(подробнее проблема описана в моём предыдущем посте,который вы,похоже, не читали...)???

4.Вам не кажется лицемерием вот эта ситуация:
Предложенный мной гипотетический вариант использования вашего решения:
Цитата:
Ну-ка попробуем ваш "простой" вариант модификации в деле:
Выполните последовательно эти шаги:
1.Создаём тестовую таблицу:
CREATE TABLE `test_enum` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`category_1` ENUM( 'one', 'two', 'three', 'four' ) NULL
) ENGINE = MYISAM ;

2.Добавляем пару тестовых значений:
INSERT INTO `test_enum` (`category_1`) VALUES ('one'), ('two');

3.Применяем ваше "простое" модифицирование:
Задача - изменить названия и кол-во категорий.
ALTER TABLE `test_enum` MODIFY `category_1` ENUM('five','six','seven');
Ваш ответ на него:
Цитата:
Я давно так не смеялся...
Вы хоть сами понимаете, что предложили?
Да, выполнение данной операции с моим кодом приведёт к ошибкам данным, если число полей измениться. Но мне смешно из-за того, что на вашем коде это приведёт к полной путанице данных. Вы вырыли яму, в которую сами же упали.
Вы привели изначально неверную операцию - нельзя менять название категории для группы полей.
Цитата из вашего кода(который уже якобы "готовое решение")(rename.php) - изменение названия Категории:
Цитата:
$query = "ALTER TABLE `articles` MODIFY `category1` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category2` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category3` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category4` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category5` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
Вам кажется, что ваше решение чем-то отличается от гипотетически предложенного мной???
Оно абсолютно идентично - вы, наверное, жутко смеялись при написании своего кода в этом месте....???

На данный момент ваше решение я не могу назвать корректно работающим,и выполняющим поставленные задачи - по причинам,указанным выше.

Цитата:
Решение задачи в моих скриптах.
Я бы за такое решение не заплатил.
Andkorol вне форума Ответить с цитированием
Старый 21.11.2010, 16:51   #59
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Ну, во-первых, добавляю скрипты с исправленным багом первой строчки (можете проверить исправлено всего 6 строчек в 2 скриптах).
Во-вторых, добавляю скриншоты работы изменения категорий. А то Я подозреваю Вы даже не поняли как запустить мои скрипты, раз аргументация у Вас так хромает.
В-третих, проблема проявлялась только на первой строчке - почему у Вас не работали остальные для меня остаётся загадкой. Хотя подозреваю Вы даже не смотрели работу, а просто отмазываетесь.
Цитата:
Вам кажется, что ваше решение чем-то отличается от гипотетически предложенного мной???
Вашего решения, а главное скорости его работы, Я так и не вижу. Это наверное потому, что при сотни статей и пол сотни категорий, ваше решение показывает фантастические тормоза.
Цитата:
Оно абсолютно идентично - вы, наверное, жутко смеялись при написании своего кода в этом месте....???
Да, выглядит крайне смешно, как и использование ENUM, но оно очень быстрое, т.к. использует внутренние возможности MySQL. Проблемы с моим подходом начнутся при нескольких миллионах статей. А в вашем решении тормоза будут с самого начала.
Цитата:
Поправлюсь. Действительно, задача для поиска статей, где каждая статья принадлежит как минимум трем категориям ,не тривиальная.
Слава богу... Ладно, это не критично.
Вложения
Тип файла: rar holywar.rar (32.5 Кб, 8 просмотров)
Тип файла: rar Скриншоты.rar (744.0 Кб, 8 просмотров)

Последний раз редактировалось Виталий Желтяков; 21.11.2010 в 16:58.
Виталий Желтяков вне форума Ответить с цитированием
Старый 21.11.2010, 17:10   #60
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Вашего решения, а главное скорости его работы, Я так и не вижу.
Перечитайте ещё раз моё сообщение.
вот вам цитата в помощь - похоже вы не понимаете о чём речь:
Цитата:
Предложенный мной гипотетический вариант использования вашего решения:
Ну-ка попробуем ваш "простой" вариант модификации в деле:
Выполните последовательно эти шаги:
1.Создаём тестовую таблицу:
CREATE TABLE `test_enum` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`category_1` ENUM( 'one', 'two', 'three', 'four' ) NULL
) ENGINE = MYISAM ;

2.Добавляем пару тестовых значений:
INSERT INTO `test_enum` (`category_1`) VALUES ('one'), ('two');

3.Применяем ваше "простое" модифицирование:
Задача - изменить названия и кол-во категорий.
ALTER TABLE `test_enum` MODIFY `category_1` ENUM('five','six','seven');

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

Цитата из вашего кода(который уже якобы "готовое решение")(rename.php) - изменение названия Категории:
Цитата:$query = "ALTER TABLE `articles` MODIFY `category1` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category2` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category3` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category4` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);
$query = "ALTER TABLE `articles` MODIFY `category5` ENUM({$q}) DEFAULT 'Нет категории' NOT NULL";
mysql_query($query);

Вам кажется, что ваше решение чем-то отличается от гипотетически предложенного мной???
Оно абсолютно идентично - вы, наверное, жутко смеялись при написании своего кода в этом месте....???
Хватит уже морозиться и нести всякую чушь в ответ на конкретные вопросы и описания проблем вашего скрипта.

Цитата:
подозреваю Вы даже не смотрели работу, а просто отмазываетесь.
Не хамите,юноша - если бы я не смотрел ваш код и "даже не понял,как настроить ваши скрипты" - как бы я смог выявить ваш баг с "Категорией1" ?????
А ваши "подозрения" здесь мало кого интересуют - факты говорят сами за себя.

Прежде чем выкладывать свой код - рекомендую всесторонне его тестировать и проверять,вас никто не торопит.
Это позволит вам избегать неловких оправданий.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переход статей timon777777 PHP 9 27.06.2010 23:16