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

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

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

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

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

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

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Да уж,проще некуда.

Ну-ка попробуем ваш "простой" вариант модификации в деле:

Выполните последовательно эти шаги:
1.Создаём тестовую таблицу:

2.Добавляем пару тестовых значений:

3.Применяем ваше "простое" модифицирование:
Задача - изменить названия и кол-во категорий.

Пожалуйста - сообщите нам полученный результат.
Я давно так не смеялся...
Вы хоть сами понимаете, что предложили?
Да, выполнение данной операции с моим кодом приведёт к ошибкам данным, если число полей измениться. Но мне смешно из-за того, что на вашем коде это приведёт к полной путанице данных. Вы вырыли яму, в которую сами же упали.
Вы привели изначально неверную операцию - нельзя менять название категории для группы полей.
Виталий Желтяков вне форума Ответить с цитированием
Старый 18.11.2010, 17:13   #42
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

И так , напомню вам что надо было получить
Цитата:
Нужно найти статьи , где каждая статья принадлежит трем определённым категориям.
Вы наверное недоконца поняли что я от вас просил.
Цитата:
$query = "SELECT `name` FROM `articles`
WHERE (`category1` IN ('{$id1}','{$id2}','{$id3}', ''))
AND (`category2` IN ('{$id1}','{$id2}','{$id3}', ''))
AND (`category3` IN ('{$id1}','{$id2}','{$id3}', ''))
AND (`category4` IN ('{$id1}','{$id2}','{$id3}', ''))
AND (`category5` IN ('{$id1}','{$id2}','{$id3}', ''))";
Неверно.
Пример 1:
Рассмотрем такую статью,пусть в category1,category2,category3 находятся искомые категории , а в category4,category5 - другие категории, как результат статью мы не получим.
Пример2:
Рассмотрем такую статью,пусть в category1,category2,category3 находятся искомые категории , а в category4,category5 - пустые, как результат статью мы не получим.

Код:
$sql = mysql_query($query);
mysql_num_rows($sql);  # это зачем ???
if (mysql_num_rows($sql) > 0) {
.......
}
while ($row = mysql_fetch_assoc($sql));
}
Да и
Код:
if (mysql_num_rows($sql) > 0) {
$row = mysql_fetch_assoc($sql);
do {
// Вывод названия статьи
echo $row['name'];
// Вывод категорий
$cat = '';
for ($i=1; $i<=5; ++$i) {
if ($row['category'+i] != '') {
$cat .= $row['category'+i] + ' ';
}
}
echo $cat;
}
}
while ($row = mysql_fetch_assoc($sql));
}
Это проще заменить на
Код:
while($row = mysql_fetch_assoc($sql))  {
  // Вывод названия статьи
  echo $row['name'];
  // Вывод категорий
  $cat = '';
  for ($i=1; $i<=5; ++$i) {
     if ($row['category'+i] != '') {
        $cat .= $row['category'+i] + ' ';
     }
  }
echo $cat;
}
//Да и SQL запрос для этогго скрипта не верен, т.к. $row['category'+i] - не существует.

Последний раз редактировалось ssdm; 18.11.2010 в 17:23. Причина: Upd
ssdm вне форума Ответить с цитированием
Старый 18.11.2010, 17:17   #43
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Цитата:
Но мне смешно из-за того, что на вашем коде это приведёт к полной путанице данных. Вы вырыли яму, в которую сами же упали.
Вы привели изначально неверную операцию - нельзя менять название категории для группы полей.
Не пишите бред , я вас прошу.
ssdm вне форума Ответить с цитированием
Старый 18.11.2010, 17:22   #44
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Да, выполнение данной операции с моим кодом приведёт к ошибкам данным, если число полей измениться. Но мне смешно из-за того, что на вашем коде это приведёт к полной путанице данных. Вы вырыли яму, в которую сами же упали.
Вы привели изначально неверную операцию - нельзя менять название категории для группы полей.
Пардон - я привёл реальную задачу,которая может возникнуть при эксплуатации вашего решения!!!
Это - предложенный вами вариант решения поставленной мною задачи(изменения названия или количества категорий).
Вам смешно потому,что вы сами сморозили глупость????
Чем мой пример не похож на реальную ситуацию с вашим вариантом???
Это писали не вы?:
Цитата:
У меня с модификацией таблицы просто:
Собираем все категории в переменную через запятую ($condition) и
Код:
ALTER TABLE 'articles' MODIFY `category01` ENUM('.$condition.');
приведите свой пример?d таком случае...
Полный пример - дабы небыло недоразумений(подобно тому,который привёл выше я - создание таблицы/добавление значений/модификация ENUM-поля)

Цитата:
Сообщение от ssdm Посмотреть сообщение
Не пишите бред , я вас прошу.
Увы....))))
Andkorol вне форума Ответить с цитированием
Старый 18.11.2010, 17:22   #45
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Сообщение от ssdm Посмотреть сообщение
Неверно.
Пример 1:
Рассмотрем такую статью,пусть в category1,category2,category3 находятся искомые категории , а в category4,category5 - другие категории, как результат статью мы не получим.
Пример2:
Рассмотрем такую статью,пусть в category1,category2,category3 находятся искомые категории , а в category4,category5 - пустые, как результат статью мы не получим.
Понял, но ответ мой такой же как и у Andkorol - формировать запрос в цикле в зависимости от числа поступивших данных. Его подход приемлем и к моему.

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

Цитата:
Пардон - я привёл реальную задачу,которая может возникнуть при эксплуатации вашего решения!!!
То что Вы привели далеко от реальности. Ваш код такую задачу тоже выполнит некорректно. Ещё раз повторю нельзя менять группу названий категорий статей.
Цитата:
Полный пример - дабы небыло недоразумений(подобно тому,который привёл выше я - создание таблицы/добавление значений/модификация ENUM-поля)
Вы что думаете, что мне легко так просто выдирать куски кода из своего проекта, упрощать их дабы они относились к данной тематике, ради того что бы показать Вам как оптимально программировать?
Создание таблицы - Вам это для чего? Структуру Я привёл.
Добавление записи - Какой записи? Статьи или категории?
Модификация категорий - Какая модификация? Добавление, удаление, изменение названия?
Виталий Желтяков вне форума Ответить с цитированием
Старый 18.11.2010, 17:42   #47
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

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

Вы что думаете, что мне легко так просто выдирать куски кода из своего проекта, упрощать их дабы они относились к данной тематике, ради того что бы показать Вам как оптимально программировать?
Я вообще ниоткуда ничего не "выдираю" - есть конкретные условия,применительно к ним я и выдаю решение.
При чём тут ваш проект вообще - если мы здесь обсуждаем условия ТС???

Цитата:
Создание таблицы - Вам это для чего? Структуру Я привёл.
Добавление записи - Какой записи? Статьи или категории?
Модификация категорий - Какая модификация? Добавление, удаление, изменение названия?
Вы решили отморозиться???
Или я пишу по-китайски?
Вы читаете мои посты?
Цитата:
подобно тому,который привёл выше я - создание таблицы/добавление значений/модификация ENUM-поля
Изначально вопрос звучал так:
Цитата:
Кстати - по поводу редактирования.
Что-то я не заметил вашего решения по редактированию самих категорий,их количества....
Это важный момент в вашем случае.
Вы тут мне пеняли на избыточность и громоздкость моего кода, вместо простого использования ENUM - ну так покажите,насколько это "простое использование"!!!
Типичные задачи - изменение названия категории,добавление новой категории,удаление ненужной категории,изменение допустимого количества категорий для одной статьи(напр. не 5,а 10).
Будьте любезны,примерчик - ну просто чтоб мы все по достоинству оценили "простоту и могущество" использования ENUM в данном случае.
В ответ - вы привели кусок запроса:
Цитата:
У меня с модификацией таблицы просто:
Собираем все категории в переменную через запятую ($condition) и
Код:
ALTER TABLE 'articles' MODIFY `category01` ENUM('.$condition.');
Я привёл вам практический пример,который вас насмешил,почему-то - хотя при этом доказал,что ваше решение по модификации - бредовое и не работает в реальных условиях.
Я прошу вас привести ваш пример модификации категорий по заданным мною условиям - в ответ вы теряете память...!!!
Что тут ещё сказать..?
Andkorol вне форума Ответить с цитированием
Старый 18.11.2010, 17:48   #48
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Код:
Понял, но ответ мой такой же как и у Andkorol - формировать запрос в цикле в зависимости от числа поступивших данных
Ой кажется мне, ждут грабли вас там , ну да ладно. Не хочется дальше этот разговор продолжать.
Цитата:
То что Вы привели далеко от реальности
Да нет. Изменение/добавление/удаление названия категории - вполне реальная задача.Если для вас это не очевидно, то извините.

Вывод:

1) В итоге PHP кода и SQL кода у вас будет больше(но покрайней мере не меньше), хотя это далеко не критерий, просто вы писали обратное.
2) Ваш подход не универсален , так как везде какие то ограничения и нюансы(да и на больших проектах админ заипется, и да вы в курсе что у таблицы есть ограничение на количество столбцов ? , если возможных категорий для обьекта будет тысячи ?).
3) Ваш пример нисколько не быстрее.
4) Повторюсь, но скорее вы не знали про то как решается эта проблема с точки зрения проектирования БД и поэтому выбрали эти грабли.
ssdm вне форума Ответить с цитированием
Старый 18.11.2010, 17:54   #49
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Очень хорошо, что в данном топике такое "жаркое" обсуждение!
Но хотелось бы, чтобы уважаемые форумчание не обижали как коллега коллегу.
Спасибо за понимание.
SkyM@n вне форума Ответить с цитированием
Старый 18.11.2010, 22:05   #50
OrcXCyber
Web-программер
Пользователь
 
Аватар для OrcXCyber
 
Регистрация: 05.11.2009
Сообщений: 49
По умолчанию

лучше уж селешками портить себе здоровье, чем писать
несколько условий в операторе WHERE...
да и с селешками легче разобраться..
имхо
OrcXCyber вне форума Ответить с цитированием
Ответ


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



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