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. Мне самому никогда это не надо было, но думаю, через регулярку несложно сделать.
Дабы не продолжать пустой спор, просто изложу своё видение темы.
Поначалу я вообще не хотел здесь ничего писать, поскольку вопрос был настолько простой, что мне казалось, ответ и без меня быстро отштампуют. Потом всё же выложил алгоритм решения, посчитав, что этого достаточно. Но нет же! Местный учёный народ, по какой-то причине посчитав себя уязвлённым, не только обложил меня словами, но и ещё и накидал мне ху минусов в репутацию. Поэтому отвечаю в полном объёме.
Такого рода данные встречаются, например, на досках объявлений. Здесь есть рубрики (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";
Например: на сайте есть раздел "Новости корпораций". И надо выбрать новости не просто про компанию Google, и не просто про смартфон, а новости, в которых написано, что именно компания Google выпустила именно смартфон. А если задать третий тег - то именно компания Google выпустила именно смартфон, конкретно с ОС Android.
Но надо-то, чтобы вывело не просто 2 значения, и не обязательно 2 значения, а те значения, у которых есть необходимая совокупность тегов.
---------- Добавлено 07.10.2016 в 13:48 ----------
lutskboy: LEOnidUKG и Sitealert такая структура реализована в дле
но если не затруднит то подскажите ваше виденье на структуру таблиц. спасибо
Ломать структуру готовой CMS - тогда нужно иметь какой-то определённый опыт, потому как если сломаете в одном месте, то может вылезти боком в другом месте. А насчёт моего видения - я написал: делается отдельная таблица для тегов, где есть столбцы с id тега, его названием, каким-то комментарием (чтобы из админки было видно, к каким материалам он относится). А в таблице новостей добавляется столбец, в котором перечисляются id тегов к каждой новости - например, в виде строки с разделителями или в виде сериализованного массива. Тогда запрос просматривает 500 строк с новостями, а не 5000 строк с новостями и тегами в разных комбинациях (где надо ещё и найти определённые совпадения). А уже скрипт парсит теги и отбирает нужные новости.
А в том виде, как сейчас, мне, честно говоря, ничего рационального с ходу в голову не приходит.
С учётом этого, количество операций действительно одинаковое. Но у меня операция ltrim(), а в альтернативном варианте - implode(). В первом случае программа проверяет первый символ строки, и если он совпадает с заданным - удаляет его. Во втором случае программа склеивает новую строку из элементов массива произвольной длины. Мне почему-то кажется, что второй вариант более трудоёмок. Я понимаю, что современные процессоры что угодно вынесут на своём горбу, но стремление к уменьшению ресурсоёмкости склоняет меня к первому варианту. Большое складывается из мелочей. Да простит меня оппонент, каждый имеет право на свою точку зрения.
Stek: Зря вы так. Ваш оппонент привел полностью готовый код, как говорится "бери и пользуйся". В нем сразу предусмотрено несколько уровней. А формировать двухмерный массив все равно пришлось бы фактически идентичным кодом.
Да вовсе не зря. Сыпать якобы "умными" словами и намекать на некомпетентность собеседника - это моветон, за который надо советовать "убитьсяабстенку". И вбухать на форум содранный невесть откуда кусок кода, имеющий отдалённое отношение к вопросу топикстартера, не везде работающий, обременённый всякими лишними операциями и не содержащий того, чего надо - это вовсе не код "бери и пользуйся". Можете спросить об этом мнение ТС 🙄 .
К слову сказать, "оппонент" формирует не двухмерный а ТРЁХМЕРНЫЙ массив, с единственным элементом, являющимся двухмерным массивом, только для того, чтобы выдать этот двухмерный массив на выходе. Который, как я и написал, придётся разбирать циклом.
Наверное, я действительно чего-то не понимаю:
автоматически добавляет слеш к http://sampe.ru/somealias, делая редирект на http://sampe.ru/somealias/
проблема в том, чтобы апач мне вообще не делал переадресацию на папку /somealias/ , если мне нужен только /somealias...
На мой взгляд, вполне естественно то, что если нет файла http://sampe.ru/somealias, но есть папка http://sampe.ru/somealias, апач пытается открыть именно эту папку. Зачем искать обходные пути, если существуют простые решения?
выскакивает индексная страница со списком файлов, либо закрытый доступ, если стоит запрет indexes off в .htaccess.
Для начала я всё-таки создал бы файл index.html, чтобы чистая страница открывалась. И в .htaccess "Options -Indexes". А потом редирект на somealias.html - либо тупо в каждом index.html, либо в корневом .htaccess. Мне самому никогда это не надо было, но думаю, через регулярку несложно сделать.
Дабы не продолжать пустой спор, просто изложу своё видение темы.
Поначалу я вообще не хотел здесь ничего писать, поскольку вопрос был настолько простой, что мне казалось, ответ и без меня быстро отштампуют. Потом всё же выложил алгоритм решения, посчитав, что этого достаточно. Но нет же! Местный учёный народ, по какой-то причине посчитав себя уязвлённым, не только обложил меня словами, но и ещё и накидал мне ху минусов в репутацию. Поэтому отвечаю в полном объёме.
Дана исходная таблица БД:
Такого рода данные встречаются, например, на досках объявлений. Здесь есть рубрики (Rub) и в каждой рубрике категории (Sub). Соответственно Rub_id - родительские элементы, Sub_id - дочерние. Эти идентификаторы обычно выводятся в HTTP-запросах; а для человекопонимания нужны буковки, соответственно в таблице содержатся имена (Rub_name и Sub_name) для рубрик и категорий. При больших объёмах данных имена родительских элементов хранятся в другой таблице, созданной для родительских категорий (чтобы не писать 100500 раз слово "Транспорт", а ссылаться на него по Rub_id=1), но если таблица небольшая, вариант ТС может быть удобным для её чтения человеком, и опять же не надо обращаться к другой таблице через JOIN.
В данном случае для решения поставленной задачи важен не столько запрос к БД, сколько способ его обработки. Нужно сформировать двухмерный массив , отражающий структуру данных. Каждый элемент этого массива должен содержать категории отдельной рубрики. Потом этот массив нужно разобрать на элементы и вывести их в удобном для пользователя виде - например, как список или таблицу. Ниже приведён код, выводящий в браузере список:
Код рабочий, проверил на одном из своих сайтов. Времени на написание всего этого поста ушло больше, чем на написание и проверку кода.
Здравствуй, дерево!😂
Не намерен продолжать эту бесполезную дискуссию.
Вы можете и дальше говнякать вволю.
Вот только не надо свой личный говнокод преподносить как конфетку. А думать надо было, когда начали меня троллить ни с того, ни с сего.
---------- Добавлено 07.10.2016 в 17:15 ----------
У ТС изначально структура шлаковая, на что был предложен хороший рабочий вариант, который не устроил пока только вас.
Короче, всё, что не Ваше - шлаковое. Нормальная структура у ТС, это только Вам непонятно.
что нужно ТС
Например: на сайте есть раздел "Новости корпораций". И надо выбрать новости не просто про компанию Google, и не просто про смартфон, а новости, в которых написано, что именно компания Google выпустила именно смартфон. А если задать третий тег - то именно компания Google выпустила именно смартфон, конкретно с ОС Android.
ведь на спичках же экономия
Да уже вчера все согласились, что вопрос больше теоретический, чем практический. Типа холивар получается.
только два значения? LIMIT 0, 2
Но надо-то, чтобы вывело не просто 2 значения, и не обязательно 2 значения, а те значения, у которых есть необходимая совокупность тегов.
---------- Добавлено 07.10.2016 в 13:48 ----------
LEOnidUKG и Sitealert такая структура реализована в дле
но если не затруднит то подскажите ваше виденье на структуру таблиц. спасибо
Ломать структуру готовой CMS - тогда нужно иметь какой-то определённый опыт, потому как если сломаете в одном месте, то может вылезти боком в другом месте. А насчёт моего видения - я написал: делается отдельная таблица для тегов, где есть столбцы с id тега, его названием, каким-то комментарием (чтобы из админки было видно, к каким материалам он относится). А в таблице новостей добавляется столбец, в котором перечисляются id тегов к каждой новости - например, в виде строки с разделителями или в виде сериализованного массива. Тогда запрос просматривает 500 строк с новостями, а не 5000 строк с новостями и тегами в разных комбинациях (где надо ещё и найти определённые совпадения). А уже скрипт парсит теги и отбирает нужные новости.
А в том виде, как сейчас, мне, честно говоря, ничего рационального с ходу в голову не приходит.
Вроде бы вчера закончили уже ... :)
Ну раз решили продолжить здесь, тоже выскажусь
удаление первой запятой?
С учётом этого, количество операций действительно одинаковое. Но у меня операция ltrim(), а в альтернативном варианте - implode(). В первом случае программа проверяет первый символ строки, и если он совпадает с заданным - удаляет его. Во втором случае программа склеивает новую строку из элементов массива произвольной длины. Мне почему-то кажется, что второй вариант более трудоёмок. Я понимаю, что современные процессоры что угодно вынесут на своём горбу, но стремление к уменьшению ресурсоёмкости склоняет меня к первому варианту. Большое складывается из мелочей. Да простит меня оппонент, каждый имеет право на свою точку зрения.
Зря вы так. Ваш оппонент привел полностью готовый код, как говорится "бери и пользуйся". В нем сразу предусмотрено несколько уровней. А формировать двухмерный массив все равно пришлось бы фактически идентичным кодом.
Да вовсе не зря. Сыпать якобы "умными" словами и намекать на некомпетентность собеседника - это моветон, за который надо советовать "убитьсяабстенку". И вбухать на форум содранный невесть откуда кусок кода, имеющий отдалённое отношение к вопросу топикстартера, не везде работающий, обременённый всякими лишними операциями и не содержащий того, чего надо - это вовсе не код "бери и пользуйся". Можете спросить об этом мнение ТС 🙄 .
К слову сказать, "оппонент" формирует не двухмерный а ТРЁХМЕРНЫЙ массив, с единственным элементом, являющимся двухмерным массивом, только для того, чтобы выдать этот двухмерный массив на выходе. Который, как я и написал, придётся разбирать циклом.