Здравствуйте! Прошу помочь. Делаю запрос на БД Код (Text): if ($cstart) { $cstart = $cstart - 1; $cstart = $cstart * $config['news_number']; } $newsmodule = true; $xf = urldecode ( $_GET['xf'] ); if ( $config['charset'] == "windows-1251" AND $config['charset'] != detect_encoding($xf) ) { $xf = iconv( "UTF-8", "windows-1251//IGNORE", $xf ); } $xf = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( $xf ) ) ), ENT_QUOTES ) ); $url_page = $config['http_home_url'] . "actors/" . urlencode ( str_replace("'", "'", $xf) ); $user_query = "do=actors&xf=" . urlencode ( str_replace("'", "'", $xf) ); if (isset ( $_SESSION['dle_sort_actors'] )) $news_sort_by = $_SESSION['dle_sort_actors']; if (isset ( $_SESSION['dle_direction_actors'] )) $news_direction_by = $_SESSION['dle_direction_actors']; $sql_select = "SELECT SQL_CALC_FOUND_ROWS p.id, p.autor, p.date, p.short_story, SUBSTRING(p.full_story, 1, 15) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}xfields LIKE '%{$xf}%' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number']; $sql_count = "SELECT FOUND_ROWS() as count"; $allow_active_news = true; БД в строке xfields такие значения Код (Text): ||title|Chronicle ||quality|HDRip ||year|2012 ||country|США ||director|Джошуа Транк ||actors|Майкл Б. Джордан, Майкл Келли, Дэйн ДеХаан, Анна Вуд, Эшли Хиншоу, Алекс Расселл, Хосе Ваз, Люк Стейн, Мэттью Робертс ||time|83 мин. при запросе помощью LIKE '%{$xf}%' например /actors/Майкл+Келли показывает тот материал котором есть актер Майкл Келли, но если написать так /actors/США то показывает материалы котором есть страна, то он ищет с xfields а не внутри xfields [actors], так что не стандартно такое. Вот бы хотел спросить как сделать что бы LIKE '%{$xf}%' искал с строки [actors]. Прошу помочь
Это невозможно, так как если создать новую таблицу то это потеряет весь смысл. Хотел сделать с этого. А возможно получить то что ищу из строки?
давайте вы слегка расслабитесь, не будете пугаться. =) тут всё просто. Вы можете жить с той штукой что у вас есть сейчас, если вы студент и должны сдать диплом на троечку. Если эта программа у вас создаётся из расчёта реального применения, то иного выхода, кроме как сделать отдельную таблицу у вас нет. Это очень просто. Скажите сначала, какая реальная задача этого проекта: сдали забыл, или должно работать и радовать людей?
Извините, но я еще школьник и по этому и спрашиваю)) Сдать и забыть не люблю, да и бесполезно было бы его сделать, а радовать людей вот что хочу, но еще не получается.
если у вас будут такие данные (это вы из сами туда в таком виде понапихали?), то чтобы сделать выборку, серверу базы данных надо будет прочесть каждую строку, посмотреть что там, провести поиск, решить, включать ли строку в выборку. Это фатально для производительности, и выборки вы строить толком не сможете. нужно поступить так. Выносите всё это дело в таблицу типа №фильма, имя параметра, значение параметра и когда вам надо найти все фильмы американского производства, вы делаете запрос типа SELECT `номер_фильма` WHERE `имя_параметра` = 'country' AND `значение_параметра` = 'США' Вы получили все айдишники киношек, и следующим запросом (или джоином) выбираете все эти киношки. принцип ясен?
Нет. Это дополнительные поля создаваемой движком, оказывается данные в полях впихивает в одну таблицу. Что потом перенести их в другую таблицу не возможен. Это значить отбор из xfields [actors] не возможен? Кроме как создать таблицу нет выхода?
Зависит от размера базы и частоты поисковых запросов. Ну и от сервера. В любом случае даже единичный поиск будет очень долгим. Надо тестировать.
базы данных не просто там что-то в себе хранят и шарятся по куче строк. Они работают быстро, если построены индексы. Это как содержание в книге. Некоторые запросы способны выполняться без заглядывания в таблицу, одними только индексами. Но если нет - индексы очень помогают найти те строки, которые надо проверить. В твоём случае любой запрос будет вызвать полное чтение по-буквам всей таблицы каждый раз. =)