а как узнать выполнился ли запрос?

Safary

Новичок
Активист, спасибо, но не совсем это мне было нужно )

dimagolov, во, спасибо! Но тут тоже первый запрос по CatName идет, но это нормально, я думал что даже так нельзя, тормоза будут. А ведь по-другому и не сделать.
Огга, всё понятно. Огромное тебе спасибо! Буду переделывать свой код =)
Как хорошо что я его сюда запостил то, а то так бы и работала сиэмэс на моем говнокоде.
А вот про JOIN сейчас буду читать, ещё раз огромное тебе спасибо!!!

-~{}~ 12.03.09 01:26:

Активист, про ЧПУ я уже знаю, недавно разбирал как работает Mod Rewrite, но за ссылку спасибо, нашел там интересные темы =)
 

dimagolov

Новичок
Mod Rewrite тебе не особо подойдет, так как ты хочешь включать в url то, что динамически меняется в БД. максимум, чем Mod Rewrite сможет помочь, это выдергивать имя категории из url и включать ее в GET-параметр. но то же самое можно делать и анализом URI в скрипте.
но все остальное все равно через базу делать придется.
 

Safary

Новичок
dimagolov, если можно, то ещё один вопрос хотел бы узнать.
К примеру сделал я категории, ну таблицу категорий, к примеру захожу на ссылку:
www.safary.ru/programs/graphics/editors/

Тут у меня всё из таблицы категорий выбирается... Дальше категорий нету. Мой вариант как поступать дальше. В таблице категорий, где последняя категория, в которой нет категорий уже - в базе указывается адресс таблицы, в данном случае programs, а дальше уже в таблице programs ищется по ID все редакторы...

Знаю, может показаться тупым решение, но почему-то я именно к такому варианту раньше пришел, зачем-то это нужно было мне... А вот в общем. Я систему сиэмэс такую хотел сделать, что почти всем содержимым сайта один мод управляет и называется он category.

Он ищет в таблице категорий(а там все категория сайта, тоесть вся структура) нужный раздел и показывает какие там папки есть. Показывает их по шаблону. У меня в таблице категорий есть поле, где указывается шаблон категории. Ну в каком дизайне папки показывать или список и т.д.

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

-~{}~ 12.03.09 01:37:

dimagolov, ну да. я мод_реврайт и использую именно для того, чтобы имена GET-переменных в урле скрывать. всё правильно, остальное через базу =)
 

dimagolov

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

у тебя есть только нюанс, что имена категорий не уникальны. самое простое решение - хранить в таблице категорий не только ее имя, но и полный URI категории и искать по URI (чтобы не отбирать все категории по URI и не искать их детей на всю глубину вложенности). но такой поиск ты будешь делать только один раз, для определения текущей категории, все остальные будут искаться уже по ее ID.
п.с. сделав такое надо будет подумать как обновлять URI всех детей и самой категории, если был изменено имя родителя. Я такое триггерами и хранимыми процедурами делаю, но можно и менее заумно. кстати, строить uri при таком обновлении не сложно - вытаскиваем имя родителя и добавляем имя самого ребенка.
 

Safary

Новичок
pilot911, о не... тока не классы :eek:)

dimagolov, а зачем хранить в таблице ID парента? Тоесть зайду я на /programs/graphics/editors/photoshop
и будет искаться парент фотошопа, следующий запрос - парент едитора, след. парень графикс... 3 запроса получается.
Не легче ли присать к примеру так:
name .PHOTOSHOP
path .. 1.3.2

Чтобы сразу материальный путь писать и по нему и производить поиск... и запутаться нельзя )

А про то что категории повторяться могут, так тоже можно ведь по path'u искать, вместо УРЛа категории. Или я ошибаюсь?

-~{}~ 12.03.09 14:31:

и ещё я не совсем понял... мне нужна таблица Categories и таблица Files...
В категории я выбираю категорию и т.д.
А потом в конечной категории ищется уже по таблице Files файлы, у которых path равен скажем... 1.3.2 Ну и выводится. Всё правильно?

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

Ааа. Врубился зачем по УРЛу искать, а не по path... Ты имел ввиду что 2 одинаковых категории и урл берется из ГЕТ. Я другой вариант буду думать, но если ничего не придумаю, буду этот способ использовать, хотя мне не особо он нравится ((

-~{}~ 12.03.09 14:32:

поиск по материальному пути просто удобней будет, он ведь одним запросом выполняется, вот вопрос - скорость ведь не теряется, она такая же как и по INT ведь получается?
 

tashkentchi

Новичок
Автор оригинала: Safary
ну как бы мне нужно знать нашлось че-нить или не нашлось, а сколько нашлось мне пофиг =)
Лучше если бы просто возвращала 1 если нашлось, 0 - если не нашлось.
Так и пиши: SELECT 1 FROM ... LIMIT 1
 

Safary

Новичок
tashkentchi, эээ. не очень понял...
всмысле если я так напишу - то
if($q) echo '"идите в попу, в базе больше нет записей"';

если запрос ниче не нашел - то вызвращаем "идите в попу, в базе больше нет записей"

Но это же не сработает
 

dimagolov

Новичок
Safary, ты лучше формулируй вопросы чтобы не получать на них таки вот такие вот правильные, но бессмысленные ответы.
 

Safary

Новичок
dimagolov, ну вот не научился ещё формулировать :)
но буду стараться не задавать двусмысленные вопросы больше.

-~{}~ 14.03.09 04:14:

вот делаю... вопросы возникли....

делаю таким образом.
есть ссылка /soft/graphics/editors/
я беру и делю её в массив, получается
PHP:
[1]=>soft [2] => graphics [3] =>editors
делаю запрос в базу: ВЫБРАТЬ id ГДЕ имя='последний элемент массива'

потом в цикле ищу всех родителей этого массива...

Если у меня 2 editors в разных категориях - как быть? вариант как dimagolov подсказал мне не нравится...

Может сделать лучше по такой схеме -

$q = ВЫБРАТЬ id,link ГДЕ имя='последний элемент массива'

$link = ВЫБРАТЬ link ГДЕ id=.$id

а потом... if($link==$q['link']) echo 'Всё гуд, категория правильная';

Вроде быстро получается так... Тоесть у каждой категории в базе есть ссылка и после того, как я узнаю ID последней категории по $_GET['path'] - то запрашиваю из базы link этой категории. а потом просто сравниваю link с $_GET['path'];

Если они равны - категория правильная. мне вариант нравится. Но подскажите что делать если категория неправильная... как выбрать другую категорию с таким-же именем? или может есть смысл проверить единственная ли категория с таким именем - если да - то не сравнивать ссылку со значнием в базе, а если не единственная - то в цикле находить link всех категорий с таким именем в базе и сравнивать со ссылкой, пока они не окажутся равны...

-~{}~ 14.03.09 04:25:

а всё уже наскриптовал всё )))
Только подскажите, это хорошая идея-то? или опять говнокод пишу?

-~{}~ 14.03.09 04:32:

кароче вот код:
PHP:
$path=$_SERVER['REQUEST_URI'];
$apath=explode('/',$path);
$apath=clear_arr($apath);
$path_count=count($apath);

$q=mysql_query("SELECT * FROM structure WHERE section='".$apath[$path_count]."'");
while($s=mysql_fetch_array($q)){
if($path==$s['link']){echo 'категория существует!'; break;}
}
Мне нравится... А вам как?
 

dimagolov

Новичок
ну я же писал, храни в базе полный uri своей категории и при обработки ссылки ищи по ней. тогда неоднозначностей не будет с категориями, у которых одинаковые названия. а еще лучше храни не полный uri, а md5 от него. уникальность тоже практически гарантированна, а храниться всегда в 32-х символьной строке и искать легко - взял md5($_SERVER['REQUEST_URI']) и вставил в запрос. ничего не помешает то поле проиндексировать.

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

Safary

Новичок
так я ж не по полной request url ищу, а по $apath[$path_count];
тоесть по последней категории, типа /soft/graphics/editors/
последняя - editors, вот по ней и ищется. а потом в цикле уже сверяется REQUEST и link из таблицы. если они равны - то всё ок. если не равны то проверяется следующая категория с таким-же именем, если такой нету - то request не правильный и выводится ошибка 404.

Я че-то совсем не пойму как md5 так шифрует что любую строку в 32 символа делает 0_o
Щас строку из 300 симоволов закриптовал и всё работает, странно... Но по идее её ж назад не расшифровать. А хотя брутфорсом можно расшифровать, так как она из 300 символов 32 тогда делает? 0_о фантастика!!!
Или она первые 32 делает?

dimagolov, теперь всё понял, большое человеческое тебе спасибо! :) Очень помог!

-~{}~ 14.03.09 17:54:

Я ещё не понимаю зачем при регистрации пароль в md5 шифровать. Ведь можно не шифровать, на безопасность никак не влияет, только при условии что базу сопрут?
За то так у ся в админке можно сужие пароли смареть, вдруг подойдут к контакту или к асе =)
 

x-yuri

Новичок
так я ж не по полной request url ищу, а по $apath[$path_count];
тоесть по последней категории, типа /soft/graphics/editors/
последняя - editors, вот по ней и ищется. а потом в цикле уже сверяется REQUEST и link из таблицы. если они равны - то всё ок. если не равны то проверяется следующая категория с таким-же именем, если такой нету - то request не правильный и выводится ошибка 404.
и зачем ты по $apath[$path_count] ищешь? Тебе кто-то такое советовал? Зачем такие сложности, если можно сразу же найти нужную запись?
 

Safary

Новичок
ну мне ж тут говорили что искать по пути /soft/graphics/editors/ в таблице глупо, так как медленно будет.
мне такая система как я щас сделал нравится, если мне минусы тут не покажет никто или лучше не предложит )
я по последней категории ищу и сравниваю для проверки та ли это категория или нет... Ну как бы тут быстрее получается, т.к. ищется по имени категории, а не по длинному пути всех категорий.
ты советуешь как и было сделать, тока без регулярки? медленно же будет...

-~{}~ 14.03.09 19:09:

dimagolov, а тут они очень длинный текст зашифровали в мд5 и теперь он как ключ, по которому искать? И быстрее ищет по шифровке, чем по просто длинному тексту, да?
Блин, ща буду читать алгоритм md5-шифрования... че то ваще не врублюсь )
 

dimagolov

Новичок
изначально, когда тебе советовали искать категорию не учитывали, что они у тебя могут совпадать и раз так, то надо учитывать весь uri. да и сам ты изначально вырезал последнюю, из-за чего и было сделано ошибочное предположение про уникальность. но хранить длинную строку uri и искать по ней тоже решение так себе, так как будет не особо быстро. выходом является хранение md5 от uri. идея md5 в том, что от разных строк с вероятностью близкой к 100% md5 будет разный и вполне по полученному ключу можно искать (можно вообще md5 разбить на две половинки, получить два значения MySQL BIGINT и сделать по ним составной индекс)
 

Safary

Новичок
да не, так извращаться я не буду ) Тогда в общем просто url шифрую, в базу запихиваю.
пхп ищет md5 REQUEST URL в базе и получает ID, все остальные операции уже по ID, всё понятно, спасибо!

Но по идее мой способ лучше. он быстрее и точнее. md5 может быть не уникальным, конечно это супер редкое явление, но всёравно... И быстрее найти же последнюю категорию, выбрать её линк и сравнить с REQUEST_URL... Быстрее, потому что название категории больше, чем 32 точно не будет. В общем этот способ буду юзать. Спасибо что навели меня на мысль.

Тему пока не закрывайте, может ещё че-нить спросить придется, лучше в этой теме буду спрашивать, чтоб на форуме не мусорить с кучей новых тем )
 

Safary

Новичок
такая таблица:
a55d95e844e71bdef431727915ef195c
dfg74hdsuhsd37bv3vb5923765v392b4
437vbb348bv934b739vb74b3v9847bv7
vb392vb937v9sgfdsnbi34ghg43jhg4hk3

и такая:
soft
graphics
system
editors

слово editors же быстрее найдет, чем vb392vb937v9sgfdsnbi34ghg43jhg4hk3 правильно?
Или я ошибаюсь?
 
Сверху