Sitealert

Рейтинг
469
Регистрация
30.09.2016

Наверное, я действительно чего-то не понимаю:

Muhandis:
автоматически добавляет слеш к http://sampe.ru/somealias, делая редирект на http://sampe.ru/somealias/
Muhandis:
проблема в том, чтобы апач мне вообще не делал переадресацию на папку /somealias/ , если мне нужен только /somealias...

На мой взгляд, вполне естественно то, что если нет файла http://sampe.ru/somealias, но есть папка http://sampe.ru/somealias, апач пытается открыть именно эту папку. Зачем искать обходные пути, если существуют простые решения?

Muhandis:
выскакивает индексная страница со списком файлов, либо закрытый доступ, если стоит запрет indexes off в .htaccess.

Для начала я всё-таки создал бы файл index.html, чтобы чистая страница открывалась. И в .htaccess "Options -Indexes". А потом редирект на somealias.html - либо тупо в каждом index.html, либо в корневом .htaccess. Мне самому никогда это не надо было, но думаю, через регулярку несложно сделать.

Дабы не продолжать пустой спор, просто изложу своё видение темы.

Поначалу я вообще не хотел здесь ничего писать, поскольку вопрос был настолько простой, что мне казалось, ответ и без меня быстро отштампуют. Потом всё же выложил алгоритм решения, посчитав, что этого достаточно. Но нет же! Местный учёный народ, по какой-то причине посчитав себя уязвлённым, не только обложил меня словами, но и ещё и накидал мне ху минусов в репутацию. Поэтому отвечаю в полном объёме.

Дана исходная таблица БД:


Id | Rub_id | Sub_id | Rub_name | Sub_name
-------------------------------------------------
1 | 1 | 1 | Транспорт | Легковые
2 | 1 | 2 | Транспорт | Грузовые
3 | 2 | 3 | Строительство | Бетон
4 | 2 | 4 | Строительство | Штукатурка
5 | 3 | 5 | Отдых | Отели

Такого рода данные встречаются, например, на досках объявлений. Здесь есть рубрики (Rub) и в каждой рубрике категории (Sub). Соответственно Rub_id - родительские элементы, Sub_id - дочерние. Эти идентификаторы обычно выводятся в HTTP-запросах; а для человекопонимания нужны буковки, соответственно в таблице содержатся имена (Rub_name и Sub_name) для рубрик и категорий. При больших объёмах данных имена родительских элементов хранятся в другой таблице, созданной для родительских категорий (чтобы не писать 100500 раз слово "Транспорт", а ссылаться на него по Rub_id=1), но если таблица небольшая, вариант ТС может быть удобным для её чтения человеком, и опять же не надо обращаться к другой таблице через JOIN.

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

<?php

//Формируем ассоциативный массив

$sql = "SELECT rub_name,sub_name FROM table ORDER BY rub_name,sub_name";

$all = array();
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
$all[$row['rub_name']][] = $row['sub_name'];
}

//Разбираем массив и выводим список
?>
<ul>
<?php
foreach ($all as $key=>$rub){
echo " <li>$key\n <ul>\n";
foreach ($rub as $sub){
echo " <li>$sub</li>\n";
}
echo " </ul>\n </li>\n";
}
?>
</ul>

Код рабочий, проверил на одном из своих сайтов. Времени на написание всего этого поста ушло больше, чем на написание и проверку кода.

Такая структура данных предполагает хранение информации о смежных вершинах нашего дерева

Здравствуй, дерево!😂

Не намерен продолжать эту бесполезную дискуссию.

dma84:
Вы можете и дальше говнякать вволю.

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

---------- Добавлено 07.10.2016 в 17:15 ----------

dma84:
У ТС изначально структура шлаковая, на что был предложен хороший рабочий вариант, который не устроил пока только вас.

Короче, всё, что не Ваше - шлаковое. Нормальная структура у ТС, это только Вам непонятно.

tommy-gung:
что нужно ТС

Например: на сайте есть раздел "Новости корпораций". И надо выбрать новости не просто про компанию Google, и не просто про смартфон, а новости, в которых написано, что именно компания Google выпустила именно смартфон. А если задать третий тег - то именно компания Google выпустила именно смартфон, конкретно с ОС Android.

tommy-gung:
ведь на спичках же экономия

Да уже вчера все согласились, что вопрос больше теоретический, чем практический. Типа холивар получается.

tommy-gung:
только два значения? LIMIT 0, 2

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

---------- Добавлено 07.10.2016 в 13:48 ----------

lutskboy:
LEOnidUKG и Sitealert такая структура реализована в дле
но если не затруднит то подскажите ваше виденье на структуру таблиц. спасибо

Ломать структуру готовой CMS - тогда нужно иметь какой-то определённый опыт, потому как если сломаете в одном месте, то может вылезти боком в другом месте. А насчёт моего видения - я написал: делается отдельная таблица для тегов, где есть столбцы с id тега, его названием, каким-то комментарием (чтобы из админки было видно, к каким материалам он относится). А в таблице новостей добавляется столбец, в котором перечисляются id тегов к каждой новости - например, в виде строки с разделителями или в виде сериализованного массива. Тогда запрос просматривает 500 строк с новостями, а не 5000 строк с новостями и тегами в разных комбинациях (где надо ещё и найти определённые совпадения). А уже скрипт парсит теги и отбирает нужные новости.

А в том виде, как сейчас, мне, честно говоря, ничего рационального с ходу в голову не приходит.

Вроде бы вчера закончили уже ... :)

Ну раз решили продолжить здесь, тоже выскажусь

tommy-gung:
удаление первой запятой?

С учётом этого, количество операций действительно одинаковое. Но у меня операция ltrim(), а в альтернативном варианте - implode(). В первом случае программа проверяет первый символ строки, и если он совпадает с заданным - удаляет его. Во втором случае программа склеивает новую строку из элементов массива произвольной длины. Мне почему-то кажется, что второй вариант более трудоёмок. Я понимаю, что современные процессоры что угодно вынесут на своём горбу, но стремление к уменьшению ресурсоёмкости склоняет меня к первому варианту. Большое складывается из мелочей. Да простит меня оппонент, каждый имеет право на свою точку зрения.

Stek:
Зря вы так. Ваш оппонент привел полностью готовый код, как говорится "бери и пользуйся". В нем сразу предусмотрено несколько уровней. А формировать двухмерный массив все равно пришлось бы фактически идентичным кодом.

Да вовсе не зря. Сыпать якобы "умными" словами и намекать на некомпетентность собеседника - это моветон, за который надо советовать "убитьсяабстенку". И вбухать на форум содранный невесть откуда кусок кода, имеющий отдалённое отношение к вопросу топикстартера, не везде работающий, обременённый всякими лишними операциями и не содержащий того, чего надо - это вовсе не код "бери и пользуйся". Можете спросить об этом мнение ТС 🙄 .

К слову сказать, "оппонент" формирует не двухмерный а ТРЁХМЕРНЫЙ массив, с единственным элементом, являющимся двухмерным массивом, только для того, чтобы выдать этот двухмерный массив на выходе. Который, как я и написал, придётся разбирать циклом.

Всего: 8084