За последние 24 часа нас посетили 17158 программистов и 1298 роботов. Сейчас ищут 1518 программистов ...

Проблема создания каталога

Тема в разделе "MySQL", создана пользователем kit, 30 янв 2007.

  1. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Делаю каталог организаций:

    КАТАЛОГ:
    - Категория 1
    - подкатегория 1 к категории 1
    - подкатегория 2 к категории 1
    - подкатегория 3 к категории 1
    - Категория 2
    - подкатегория 1 к категории 2
    - подкатегория 2 к категории 2
    - подкатегория 3 к категории 2
    и т.д.
    Сделал две таблицы:

    table category
    ----------------------------------------------
    |cat|pcat| name |
    ----------------------------------------------
    | 1 | 0 |Категория 1 |
    | 2 | 1 |подкатегория 1 к категории 1|
    | 3 | 1 |подкатегория 2 к категории 1|
    | 4 | 1 |подкатегория 3 к категории 1|
    | 5 | 0 |Категория 2 |
    | 6 | 5 |подкатегория 1 к категории 2|
    | 7 | 5 |подкатегория 2 к категории 2|
    | 8 | 5 |подкатегория 3 к категории 2|

    cat - уникальный номер категории или подкатегории.
    pcat - номер категории, которой принажлежит подкатегория, если 0 - то это категория.

    table users
    -----------------------------
    |id|category| firma |
    -----------------------------
    |1 | 1 |Рога |
    |2 | 3 |Копыта |
    |3 | 2 |Рога и копыта|
    |4 | 4 |Копыта и рога|

    Организации записаны не только в подкатегорию, но и в категории и когда жмешь на "категория 1", выводятся организации этой категории и всех ее подкатегорий. Вот код, который выводит организации из категории (код для подкатегории не показываю - он похож на часть кода категории):
    PHP:
    1.  
    2. <?
    3. include "config_db.php";
    4. $cat_=$_GET['cat'];
    5. $cat_p_=$_GET['cat_p'];
    6. //----------- группа организаций
    7. $query="SELECT * FROM users WHERE category=$cat_ ";
    8. $user=mysql_query($query);
    9. while ($user_=mysql_fetch_array($user))
    10. {
    11.     echo $user_['firma'];
    12. }
    13. //----------- подгруппа организаций
    14. $query="SELECT * FROM category WHERE pcat=$cat_";
    15. $pcat=mysql_query($query);
    16. while ($pcat_=mysql_fetch_array($pcat))
    17. {
    18.     $pcat_=$pcat_['cat'];
    19.     $query="SELECT * FROM users WHERE category=$pcat_";
    20.     $user=mysql_query($query);
    21.     while ($user_=mysql_fetch_array($user))
    22.     {
    23.         echo $user_['firma'];
    24.     }
    25. }
    26. ?>
    27.  
    28.  
    Сначала выводятся организации из категории, а потом из всех подкатегорий. Вот это и плохо! Надо чтоб в категории выводились организации согласно времени их ввода в каталог (короче как-то отсортировать). Вопрос: как изменить код, чтобы организации выводились в порядке как в твблице users?
     
  2. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Так?
    PHP:
    1.  
    2. <?
    3. include "config_db.php";
    4. $cat_=$_GET['cat'];
    5. $cat_p_=$_GET['cat_p'];
    6. //----------- группа организаций
    7. $query="SELECT c.name, u.* FROM users as u LEFT JOIN category as c ON c.cat=u.category WHERE u.category={$cat_} OR c.cat={$cat_} GROUP BY u.id ORDER BY u.id";
    8. $user=mysql_query($query);
    9. while ($user_=mysql_fetch_array($user))
    10. {
    11.    echo 'Category: '.$user_['name'].'; Company: '$user_['firma'];
    12. }
    13. ?>
    14.  
    p.s. код не тестировал, на глазок переделал то что было...
     
  3. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    надо переварить...
     
  4. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Ура! Все работает! Спасибо!
    Только мааааааленькая техническая ошибочка:
    PHP:
    1.  
    2. $query="SELECT c.name, u.* FROM users as u LEFT JOIN category as c ON c.cat=u.category WHERE u.category={$cat_} OR c.pcat={$cat_} GROUP BY u.id ORDER BY u.id";
    3.  
    А так все супер!