За последние 24 часа нас посетили 21012 программистов и 1640 роботов. Сейчас ищут 1233 программиста ...

Сортировка по производителю в определённой группе товаров.

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

  1. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    Задача следующая:
    Сортировка по производителю в определённой группе товаров.
    Есть 3 таблицы
    1. Фирмы производители:
    Код (Text):
    1.  
    2. # Table structure for table 'firm'
    3.  
    4. CREATE TABLE `firm` (
    5. `id` int(10) unsigned NOT NULL auto_increment,
    6. `name` varchar(255) NOT NULL default '',
    7. `pict` varchar(100) NOT NULL default '',
    8. `ord` int(10) unsigned NOT NULL default '0',
    9. PRIMARY KEY (`id`)
    10. ) TYPE=MyISAM;
    2. Группы товаров
    Код (Text):
    1.  
    2. # Table structure for table 'subtypes'
    3.  
    4. CREATE TABLE `subtypes` (
    5. `id` int(10) unsigned NOT NULL auto_increment,
    6. `id_type` int(10) unsigned NOT NULL default '0',
    7. `title` varchar(255) NOT NULL default '',
    8. `descr` text NOT NULL,
    9. `ord` int(10) unsigned NOT NULL default '0',
    10. `logoprev` varchar(100) NOT NULL default '',
    11. `title_ru` varchar(100) NOT NULL default '',
    12. `title_lv` varchar(100) NOT NULL default '',
    13. `prev` varchar(100) NOT NULL default '',
    14. PRIMARY KEY (`id`)
    15. ) TYPE=MyISAM;
    3. Товары с описанием и выбором фирмы производителя:

    Код (Text):
    1.  
    2. # Table structure for table 'wares'
    3.  
    4. CREATE TABLE `wares` (
    5. `id` int(10) unsigned NOT NULL auto_increment,
    6. `lang` char(2) NOT NULL default '',
    7. `id_type` int(10) unsigned NOT NULL default '0',
    8. `id_subtype` int(10) unsigned NOT NULL default '0',
    9. `title` varchar(255) NOT NULL default '',
    10. `prev1` varchar(100) NOT NULL default '',
    11. `popup1` varchar(100) NOT NULL default '',
    12. `descr` text NOT NULL,
    13. `price` float NOT NULL default '0',
    14. `date` date NOT NULL default '0000-00-00',
    15. `ord` int(10) unsigned NOT NULL default '0',
    16. `made` varchar(100) NOT NULL default '',
    17. `title_foto` varchar(100) NOT NULL default '',
    18. `prev_foto` varchar(100) NOT NULL default '',
    19. `popup_foto` varchar(100) NOT NULL default '',
    20. `stitle` varchar(100) NOT NULL default '',
    21. `title1` varchar(255) NOT NULL default '',
    22. `title2` varchar(255) NOT NULL default '',
    23. `title3` varchar(255) NOT NULL default '',
    24. `title4` varchar(255) NOT NULL default '',
    25. `title5` varchar(255) NOT NULL default '',
    26. `title6` varchar(255) NOT NULL default '',
    27. `title7` varchar(255) NOT NULL default '',
    28. `title8` varchar(255) NOT NULL default '',
    29. `title9` varchar(255) NOT NULL default '',
    30. `id_firm` int(10) unsigned NOT NULL default '0',
    31. `size` varchar(100) NOT NULL default '',
    32. `id_foto` int(10) unsigned NOT NULL default '0',
    33. `nal` varchar(255) NOT NULL default '',
    34. PRIMARY KEY (`id`)
    35. ) TYPE=MyISAM;
    На php странице выподающие меню со всеми производителями:
    (отрезок кода)
    Код (Text):
    1.  
    2. / start SORT
    3.  
    4. echo " <table width=\"173\" align=\"center\" border=\"0\">\n";
    5. echo " <tr>\n";
    6. echo " <td class=gray align=right>" .$LNG['WARES_VIBOR']. "</td>\n";
    7. echo " <td class=gray><select name=name onChange=location.href=this.options[selectedIndex].value >\n";
    8. $query = "SELECT id, name FROM firm ORDER BY name";
    9. if($name = mysql_query($query))
    10. {
    11. while(list($id, $id_firm)=mysql_fetch_array($name))
    12. {
    13. echo "<option value=\"index.php?lang=$lang&p=$p&id_type=$id_type&id_subtype=$id_subtype&id_firm=$id\" >" . $id_firm . "</option>";
    14. }
    15. } else puterror("error");
    16. echo " </select></td>\n";
    17. echo " </table>";
    18.  
    19. //end SORT
    У меня сделанно так ( в администрировании ) :
    1. Сначало создаются ФИРМЫ ( <a href=firm.php> Фирмы</a> )
    2. Потом ГРУППЫ ТОВАРОВ ( <a href=subtypes.php?lang=$lang&id_type=1>1.1 Группы / Духовые шкафы</a> )
    3. Потом ТОВАРЫ ( <a href=wares.php?lang=$lang&id_type=1>1.1. Товары / Духовые шкафы</a> )

    Далее клиент сам создаёт в ( Фирмы) фирмы ARISTON и тд.
    Далее создаёт в ( 1.1 Группы / Духовые шкафы ) группу ЭЛЕКТРИЧЕСКИЕ и тд.
    Зайдя в КАТАЛОГ ( 1.1. Товары / Духовые шкафы ) создаёт товар выбрав группу ЭЛЕКТРИЧЕСКИЕ и выбрав ФИРМУ ARISTON

    P.S. Названия php файлов одноимённые с названием таблиц.

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

    Много написал ( я знаю, что это не приветствуется ), но иначе не могу объяснить суть проблемы.
     
  2. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    [sql]select distinct firm.id, firm.name from firm, wares where wares.id_type=$id_type and firm.id=wares.id_firm[/sql]
    или
    [sql]select firm.id, firm.name from firm, wares where wares.id_type=$id_type and firm.id=wares.id_firm group by firm.id[/sql]
     
  3. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    Супер !!! Ты молодец, так быстро и правильно ответить - нет слов !!!
    А можешь подсказать - у меня в окне выподающего меню по умолчанию было так : ---------- , сейчас первое название фирмы производителя, пример: Siemens. Как сделать так, чтоб они находились в алфавитном порядке и первая строка
    отображающаяся в выподающем меню по умолчанию была так : ----------
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты первым делом выведи на экран строчку ------ а потом уже список производителей
    т.е.
    PHP:
    1. <select><option value='чего-то там'>-------</option>
    2. <?php
    3. // тут в цикле выводим производителей
    4.  
    5. ?>
    6. </select>
     
  5. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    order by firm.name в конец зароса
     
  6. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    Любой пример можешь дать
     
  7. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    OK!

    Осталось разобраться как сделать , чтоб самая верхняя строчка в выподающем меню всегда была >Все товары<
    или так >----------<
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это вопрос или утверждение?

    PHP:
    1. <?php
    2. /*
    3. для примера юзаю foreach для массива FIRMY
    4. тебе нада будет юзать функции обработки результата mysql
    5.  
    6. формат:
    7. ID_Фирмы => Название_Фирмы
    8.  
    9. ID не по порядку изображают сортировку по называнию фирмы
    10. */
    11. $FIRMY = array(
    12.     4 => 'Fly',
    13.     1 => 'Motorola',
    14.     5 => 'Nokia',
    15.     4 => 'Samsung',
    16.     2 => 'Siemens'
    17. );
    18. ?>
    19. <select>
    20. <option value='чего-то там'>-------</option>
    21. <?php
    22. // тут в цикле выводим производителей
    23. foreach($FIRMY as $ID => $NAME)
    24.     echo "<option value='$ID'>$NAME</option>\r\n";
    25.  
    26. ?>
    27. </select>
    28.  
    выдает
    HTML:
    1. <option value='чего-то там'>-------</option>
    2. <option value='4'>Fly</option>
    3. <option value='1'>Motorola</option>
    4. <option value='5'>Nokia</option>
    5. <option value='3'>Samsung</option>
    6. <option value='2'>Siemens</option>
     
  9. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    это вопрос или утверждение? :D
    Спасибо, но у меня клиент сам вводит / удаляет / редактирует фирм производителей - поэтому надо делать запросы к таблице FIRM
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    PHP:
    1. <?php
    2. $q = mysql_query("select distinct firm.id, firm.name from firm, wares where wares.id_type=$id_type and firm.id=wares.id_firm;");
    3. ?>
    4. <select>
    5. <option value='чего-то там'>-------</option>
    6. <?php
    7. // тут в цикле выводим производителей
    8. while($row=mysql_fetch_array($q))
    9. {
    10.     $ID = $row['id']; //firm.id
    11.     $NAME = $row['name']; //firm.name
    12.  
    13.     echo "<option value='$ID'>$NAME</option>\r\n";
    14. }
    15. ?>
    16. </select>
    17.  
    :D
     
  11. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    В таком варианте не работает линк:
    echo "<option value="index.php?lang=$lang&p=$p&id_type=$id_type&id_subtype=$id_subtype&id_firm=$id" >" . $id_firm . "</option>";

    Спасибо всем, разобрался сам
     
  12. Vladis_OK

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

    С нами с:
    12 ноя 2007
    Сообщения:
    24
    Симпатии:
    0
    Что ещё заметил, не знаю почему, но в некоторых группах, в выподающем меню непоказывается производитель,
    который на самом деле есть

    Спасибо всем, разобрался сам