Форум → Программирование → PHP для идиотов → Разбор строки из БД на запчасти :)
Разбор строки из БД на запчасти :)
Страницы: ← Следующая страница →
-
Попробую по порядку изложить:
В БД в 1й таблице есть строки с данными вида: =2=6=
Длина таких строк в будущем может быть различной (=2=, =2=6=, =2=3=6= …), при этом символ "=" является разделителем id-шников для разделов.
В другой таблице соответственно хранятся сами разделы с нормальными id: 1,2,3…
До сих пор были переходы от категории к её составляющим, потому всё было довольно просто. Сейчас возникла обратная задача. Определить для записи принадлежность к конкретной категории или нескольким категориям и получить их номера.
Если для записей типа "=2=" всё оказалось довольно просто, т.е. в итоге я получаю эту самую "2". То этот же алгоритм при применении к более длинной строке возвращает "2 6", либо как вариант с любым разделителем, например "2.6"
В общем, надо теперь каким-то образом получить из данной строки несколько переменных с номерами соответственно "2" и "6" и т.д., если номеров больше станет..
Для разделителей нашла функцию SUBSTRING_INDEX(str,delim,count), ещё SUBSTRING(str,pos,len).. Но апач выдаёт ошибки на них, типа Fatal error: Call to undefined function SUBSTRING() in , и даже если брать функцию TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str), не ругается в случае, если она выглядит просто как $t->tt=TRIM($t->tt); Во всех остальных случаях, при использовании параметров - тоже ругается…
Может посоветуете ещё какие функции глянуть? Чтобы суметь разобрать строку на составляющие и чтобы апач не выпендривался при этом?. (по идее надо просто считывать данные до каждого следующего разделителя, но мне пока не хватает знаний и фантазии, как это сделать) -
21 июля 2010 г. 21:22, спустя 16 минут 45 секунд
Fatal error: Call to undefined function SUBSTRING() in , и даже если брать функцию TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str), не ругается в случае, если она выглядит просто как $t->tt=TRIM($t->tt); Во всех остальных случаях, при использовании параметров - тоже ругается…
прости но ты чето пиздец все в кучу собрала.
ошибки пишешь пхпшные, функции имена скльные, если бы меня так ебали я бы на тебя тоже ругался. гавнокод в студию!Сапожник без сапог -
21 июля 2010 г. 21:24, спустя 2 минуты 36 секунд
привести таблицы нужно к нормализованному виду, а не сношать мозг строчными операциями в запросах. -
21 июля 2010 г. 21:27, спустя 2 минуты 52 секунды
$t->ttt=$t->ttt.$еtid_k;
$t->ttt=STR_REPLACE("=", " ", $t->ttt);
$t->ttt=TRIM($t->ttt);
// $t->tt=STR_REPLACE(" ", ".", $t->ttt);
$t->sql_query="select * from kat_w where id_k=".$t->tt." ";
$t->sql_execute();
$sql_res=$t->sql_res;
if($t->sql_err) return(11);
echo "".$t->tt."<br />";
пока функция выглядит так (объявление переменных не стала копировать - все объявлены выше как положено)
сейчас получаю либо "2 6" либо "2.6" (если раскомментировать)
а дальше как разобрать на 2 и более переменных? -
21 июля 2010 г. 21:30, спустя 2 минуты 56 секунд
Jane, епта, а чо ты большими буквами функции пишешь????????Сапожник без сапог -
21 июля 2010 г. 21:31, спустя 1 минуту 4 секунды
Таблицы в нормальном виде, изначально, пока каждая запись 2й соответствовала всего 1й категори - были цифры везде нормальные
привести таблицы нужно к нормализованному виду, а не сношать мозг строчными операциями в запросах.
такой геморой с разделителями потребовался, когда одна и та же запись стала должна отображаться в разных категориях
сейчас вот следующий этап задачи, для записей выбирать все возможные категории, где она находитсяСпустя 31 сек.
Я их не писала, а тупо с php.ru копировала, чтобы не накосячить в синтаксисе где
Jane, епта, а чо ты большими буквами функции пишешь???????? -
21 июля 2010 г. 21:56, спустя 25 минут 1 секунду
Таблицы в нормальном виде, изначально, пока каждая запись 2й соответствовала всего 1й категори - были цифры везде нормальные
такой геморой с разделителями потребовался, когда одна и та же запись стала должна отображаться в разных категориях
для таких целей делают промежуточную таблицу со связями. хотя бы для сортировок, неговоря уже о том геморе что мы наблюдаем -
21 июля 2010 г. 22:04, спустя 8 минут 1 секунду
для таких целей делают промежуточную таблицу со связями. хотя бы для сортировок, неговоря уже о том геморе что мы наблюдаем
Когда это делалось (год или 2 назад) - был выбран вариант, который посоветовали умные люди
про таблицы со связями мне никто идей не подкинул, а я не профи (иначе бы не задавала сейчас тут вопросы)))
В общем, всю систему переделывать не хотелось бы…
Тогда вопрос по-другому задам: реально ли вообще распознавать информацию в строке между разделителями? чтобы присвоить её энному количеству переменных?
Если задача таким путём не решаема - буду думать, как это всё обходить по-другому, но пока хочется всё же так решить.. Я только не знаю, в каком направлении двигаться и какие функции искать для этого (или не функции может?)) -
21 июля 2010 г. 22:13, спустя 9 минут 2 секунды
function getArray($str) {
return explode('=', trim($str, '=')); //я честно сказать не помню как себя експлоде ведет. поверять и по мануалам лазить лень. Может трим и не нужен
}
$str = '=1=3=8=';
$array = getArray($str); -
-
21 июля 2010 г. 23:42, спустя 16 минут 58 секунд
Стоит прислушатся к тому, что сказал Faster , иначе геморой обеспечен. -
22 июля 2010 г. 0:01, спустя 18 минут 44 секунды
Уже задача решена ))) Геморой оказался всего из 3х строк ))) Зато освоила новые функции :)
Стоит прислушатся к тому, что сказал Faster , иначе геморой обеспечен.
Да и слишком много пришлось бы переделывать и перезаполнять БД.. а там записей уже……….. В общем проще было покопаться и решить задачу, чем всё сидеть исправлять.
на будущее учту, если придётся ещё когда-нибудь подобные сложные связи строить, но вообще я последнее время редко касаюсь программирования =)) -
22 июля 2010 г. 0:11, спустя 10 минут 33 секунды
Я так думаю, что в будующем тебе нужно будет почитать про nested sets. -
22 июля 2010 г. 12:54, спустя 12 часов 42 минуты 56 секунд
SpartakuS, по сути пофиг каким образом строить деревья связей в БД, главное знать что тебе в результате нужно. Нестеды тяжеловаты для изменения структуры, зато легки на выборке, а вот обычная связка "айди - парент_айди" вполне справиться в любом случае, где кол-во записей не особо большое. И да, у неё не дерево по сути-то, а просто есть некие категории, а к ним привязаны страницы. Так вот страницы - совсем другая сущность в отличии от дерева категорий. Ну по крайней мере я так понял. -
22 июля 2010 г. 13:12, спустя 18 минут
Геморой подкрадется незаметно, когда понадобится сделать чего-то еще или когда данных станет много. )))))
Уже задача решена ))) Геморой оказался всего из 3х строк )))
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!