[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Одно объявление в несколько категорий
Гость_Роман
Подскажите пожалуйста уважаемые спецы , а то я вобще самый начинающий в области PHP.
Решил переделать доску объявлений в каталог жёлтых страниц и возникла примерно такая же проблема как и с одной новостью в несколько тем...
Так же и мне необходимо добавлять объявление в одну или более категорий...
То есть на странице добавления у меня список категорий с подкатегориями в селекте с атрибутом мультипл но в базу пишется только одна категория с максимальным ид из всех выбранных и не интересно получается ... надо добавлять в каждую подкатегорию как отдельное объявление и когда в одной категории добавляешь одну и ту же фирму в разные подкатегории то когда вызываешь страницу самой категории то эта фирма повторяется много раз потому как на странице показаны все объявления которые содержатся в подкатегориях принадлежащих данной категории , то есть во сколько подкатегорий её добавил ... А хочется просто чтобы в случае вызова категорий это было один раз и в самом блоке было указано к каким подкатегориям она принадлежит , ну и соответственно при выборе подкатегорий в которых она занесена она тоже отображалась , и чтобы это всё работало если она внесена в подкатегории других категорий ...
Всем заранее СПАСИБО !!!



Спустя 6 часов, 3 минуты, 33 секунды (4.05.2009 - 03:01) Guest написал(а):
Тогда попробую объяснить...
есть такие таблицы в базе ... одна для объявлений
| id_ads | id_catg | title | ads_desc |

вторая для категорий с подкатегориями
| id_catg | catg | catg_desk | parent_id |

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

Вот , а мне надо чтобы одно объявление можно было привязать к нескольким подкатегориям хотябы до 10 , вобщем каждое к разному кол-ву подкатегорий и некоторые подкатегории могут принадлежать разным основным категориям.
меню категорий образовывается в селекте с атрибутом мультипл чтобы можно было выбрать какие надо подкатегории
PHP
."<select name=\"catgforprocess\" multiple=\"multiple\" size=\"10\">";
$applylanguage sqlapplylanguage();
$sql "select id_catg,catg,parentid from ".$myprefix."_ads_catg ";
    
$sql .= "where ".$applylanguage;
    
$sql .= " order by parentid,catg";
         
$result2=sql_query($sql$dbi);
        
$i 0;
while(list(
$id_catg2$ccatg2$parentid2) = sql_fetch_row($result2$dbi)) {
        if (
$parentid2!=0$ccatg2=getparent($parentid2,$ccatg2);
         if (
$postinmaincatg) {
            echo 
"<option value=\"$id_catg2\" ";
            if ((
$id_catg == $id_catg2) or ($id_catg == $parentid2)) {
                    if (
$id_catg == $id_catg2) {
                        echo 
"selected";
                        }
                    if (
$id_catg == $parentid2) {
                        if (
$i == 0) {
                            echo 
"selected";
                            }
                            
$i++;
                        }
                    }
            echo 
">$ccatg2</option>\n";
    } else {
        if (
$parentid2 != 0) {
            echo 
"<option value=\"$id_catg2\" ";
            if ((
$id_catg == $id_catg2) or ($id_catg == $parentid2)) {
                    if (
$id_catg == $id_catg2) {
                        echo 
"selected";
                        }
                    if (
$id_catg == $parentid2) {
                        if (
$i == 0) {
                            echo 
"selected";
                            }
                            
$i++;
                        }
                    }
            echo 
">$ccatg2</option>\n";
                }
            }
                }
        echo 
"</select>\n"


Потом в при нажатии на кнопку добавить передаётся всё это дело функции сабмит там сначала идёт проверка заполнения полей потом запись в базу
PHP
echo $sql "insert into ".$myprefix."_ads_ads values"
."('','$catgforprocess','$ads_title','$ads_content')";
            
$res sql_query($sql,$dbi);

потом идёт функция которая просто говорит что всё удачно добавлено ...
Вот и весь вопрос ... надо чтобы выбранные из селекта пункты привязались к объявлению ... не допонимаю каким образом это реализовать ???

Спустя 12 минут, 55 секунд (4.05.2009 - 03:14) Joker написал(а):
Ну например, сейчас значение подкатегорий одно и оно цифровое, можно как вариант сделать его строковым и через | записывать каким категориям оно будет присвоено. Или создать доп. табличку. Но в любом случае придеться менять вывод.

Спустя 7 минут (4.05.2009 - 03:21) Гость_Роман написал(а):
Я просто в PHP ещё только начинающий потому не получается разобраться с этой проблемой... (
И соответственно потом надо чтобы когда выбираешь показать список объявлений по алфавиту в объявлении выводилось к каким категориям и подкатегориям принадлежит объявление и соответственно когда выбираешь любую из категорий или подкатегорий к которым оно принадлежит , это объявление показывалось в списке объявлений той категории, а также в объявлении было указано к каким ещё категориям оно принадлежит....
Надеюсь теперь понятен мой вопрос ...

Спустя 10 минут, 51 секунда (4.05.2009 - 03:32) Joker написал(а):
Цитата (Гость_Роман @ 4.05.2009 - 00:29)
.. да и ещё раз повторюсь не очень я в PHP ещё разбираюсь (((


Доблести прошу web-школа там за твои денюжки тебя научат это делать и помогут все разобрать и довести до ума именно эту задачку.

Спустя 6 часов, 25 минут, 47 секунд (4.05.2009 - 09:58) HardWoman написал(а):
Цитата
Тогда попробую объяснить...
есть такие таблицы в базе ... одна для объявлений
| id_ads | id_catg | title | ads_desc |

вторая для категорий с подкатегориями
| id_catg | catg | catg_desk | parent_id |

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


Ваши таблицы несколько нерационально построены. Например первая.

Есть ID категории, ID самого объявления, Titie - текст.

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

Далее по второй таблице.Тоже неправильно, с точки зрения архитектур



Есть четыре таблицы.

1 ая.
ID объявления
текст объявления.

2 ая (называется ассоциативная связь - она же таблица)
ID категории
ID объявления

3 я
ID категории/подкатегории
название категории/подкатегории


4 я (называется ассоциативная связь - она же таблица)
Родительская таблица - категории - подкатегории - то есть какая категория является родительской для какой подкатегории.
ID категория родитель
ID категория ребенок.



Это будет наиболее приемлемым вариантом, если предполагеется большое количество вложенных категорий/подкатегорий. Читать иерархические структуры.

Если всего два уровня и подкатегории не повторяются для разных категорий - то вместо 3 и 4 таблицы можно записать так

ID категории
название категории


ID категории
ID подкатегории
Название подкатегории



В общем как то так

Спустя 1 час, 23 минуты, 11 секунд (4.05.2009 - 11:21) Alchemist написал(а):
Маленькое добавление: если дерево категорий является "простым", т.е. у каждой подкатегории есть только один "папа", то четвертая таблица не нужна, и ID родителя можно добавить прямо в третью.




Спустя 4 часа, 48 минут, 58 секунд (4.05.2009 - 16:10) Гость_Роман написал(а):
))) Вот красавцы отредактировали тему )))

Смысл таков ....
Действительно , то что лучше четыре таблицы это факт .... и походу неизбежный , а работает ...вернее должно ) так ...
Цитата
Тогда попробую объяснить...
есть такие таблицы в базе ... одна для объявлений
| id_ads | id_catg | title | ads_desc |

вторая для категорий с подкатегориями
| id_catg | catg | catg_desk | parent_id |

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

С первой таблицей я думаю всё правильно , первая колонка ид самого объявления , вторая это к какой категории принадлежит объявление , третья это заголовок , четвёртая это описание объявления ... ещё есть колонки ,но думаю нет смысла их описывать потому как они содержат всякие данные принадлежащие к объявлению всякие там е майлы и контакты , даты добавления и прочую муть... А вот во вторую таблицу в первую колонку пишется ид категорий и подкатегорий , но ... сначала для удобства я создаю главные и их ид начинается с 1 и так далее у главных категорий парент_ид всегда 0 и в главные категории добавлять объявления нельзя , уровня всего два и каждой главной категории хоть сколько подкатегорий добавляй ид_катг всегда +1 "автоинкримент" и вот все подкатегории которые принадлежат к главной с ид=1 будут иметь парент_ид =1 , главной с ид =2 будут иметь все парент_ид =2 и так далее я думаю смысл понятен , колонка катг -это заголовок категории , а катг_деск это описание категории и даже если потом придётся добавить главную категорию и её ид будет =210 , то все принадлежащие ей подкатегории будут иметь парент_ид =210 , а сортировка всёравно по названию т.е. от а до я , и вот теперь надо , я так понимаю ещё одна таблица которая будет содержать ассоциации к каким подкатегориям принадлежит объявление , но тогда в первой таблице колонка ид_катг получается не нужна ... вернее она должна содежать другие ид по которым и будет ассоциация с третьей таблицей и вид третьей таблицы ... я правильно понимаю? Должен быть примерно такой ....

| id_такой-то | id_ads | id_catg |
-------1------------3----------55
-------1------------3----------66
-------1------------3----------77
-------2------------8----------80
-------2------------8----------85

и в первой таблице вместо id_catg надо переименовать колонку в id_такой-то...
А в третью таблицу ид_адс будет записываться и ассоциироваться с категориями как в примере я указал ... Это так примерно должно быть ??? )))
Или я не так делаю ?
... И ещё я чё-то не могу понять почему из меню селекта больше одной категории не выдёргивает , то есть выделяю несколько а в базу пишет только тот пункт у которого максимальный из выделенных ид или какие то функции надо добавить ... Для меня это ещё пока сложно ... )))

Спустя 1 час, 25 минут, 37 секунд (4.05.2009 - 17:36) Kuliev написал(а):
Гость_Роман
Цитата

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


Ну наверное в селекте name= select[] сделай получишь массив выбранных значений wink.gif

Спустя 1 минута, 46 секунд (4.05.2009 - 17:37) HardWoman написал(а):
Alchemist

Где я ошибаюсь? заинтриговал.
Или ты имел ввиду эту таблицу? В первом варианте?

ID парент
ID категорий/ подкатегорий
Название категорий

Тогда согласна. Ты безусловно прав. Тормознула

Спустя 53 минуты, 4 секунды (4.05.2009 - 18:30) Alchemist написал(а):
именно так.

Спустя 21 час, 31 минута, 14 секунд (5.05.2009 - 16:02) Guest написал(а):
Цитата
Ну наверное в селекте name= select[] сделай получишь массив выбранных значений

Вот ... теперь началось самое интересное...
подскажите пожалуйста теперь как мне правильно сформировать запись в базу , то есть в разные таблицы ... и как теперь сделать чтобы при записи в ассоциативную таблицу писало ид выбранных категорий и ид объявления к которому привязаны категории ... у меня сей час запись в базу происходит так
PHP
echo $sql "insert into ".$myprefix."_ads_ads values"
."('','$catgforprocess','$ads_title','$ads_content','$imguploadname'
,'$AdsCurr','$price','$submitteruid','$email','$udat','$website'
,'$posted_on','$validuntil','0','$adslanguage','$active')"
;
            
$res sql_query($sql,$dbi);
            
header("Location:modules.php?name=".$module_name."&file=postads&op=Done&id_catg=$catgforprocess");


А выводит название категории в самом объявлении с помощью такой функции

PHP
function getcategoryname($id_catgtemp){
    global 
$nukecprefix,$dbi;
    
$resultcatgname sql_query("select catg from ".$myprefix."_ads_abr where id_catg='".$id_catgtemp."'",$dbi);
    list(
$title) = sql_fetch_row($resultcatgname,$dbi);
    return 
$title;
}

в объявлении название категории выдёргивает так
PHP
getcategoryname($xid_catg)

Я создал таблицу в базе из двух колонок вот такого характера внёс в неё записи пока в ручную
| id_ads | id_catg |
------3----------55
------3----------66
------3----------77
------8----------80
------8----------85
И у меня не получается выдернуть этой функцией
function getcategoryname ... хотябы в самом объявлении ...для начала... чтобы показало что категорий несколько
Я её долбал долбал и всё что у меня получается либо ид_адс просто показывает либо ид_катг но только из одной строки .... Я понимаю что ещё какие -то функции придётся писать чтобы выводило названия категорий и чтобы при фильтрации по категориям любая из категорий к которой объявление принадлежит отображала в своём списке это объявление ...
Чтобы в самом объявлении отображало названия объявлений всё этой же функцией function getcategoryname можно добавить в таблицу столбец для имени категории и при добавлении объявления просто вносить имя категории и в таблицу категорий и ассоциаций , но я честно говоря нифига не соображу как это довести до ума..... (
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.