Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка по производителю в определённой группе товаров.
 
 автор: VladisOK   (04.11.2007 в 22:57)   письмо автору
 
 

Задача следующая:
Сортировка по производителю в определённой группе товаров.

Для ввода производителя своя таблица:
=========================================
# Table structure for table 'firm'

CREATE TABLE `firm` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`pict` varchar(100) NOT NULL default '',
`ord` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

=========================================

В администрировании при вводе нового товара выподающие меню с выбором производителя:

=========================================

# Table structure for table 'wares'

CREATE TABLE `wares` (
`id` int(10) unsigned NOT NULL auto_increment,
`lang` char(2) NOT NULL default '',
`id_type` int(10) unsigned NOT NULL default '0',
`id_subtype` int(10) unsigned NOT NULL default '0',
`title` varchar(255) NOT NULL default '',
`prev1` varchar(100) NOT NULL default '',
`popup1` varchar(100) NOT NULL default '',
`descr` text NOT NULL,
`price` float NOT NULL default '0',
`date` date NOT NULL default '0000-00-00',
`ord` int(10) unsigned NOT NULL default '0',
`made` varchar(100) NOT NULL default '',
`title_foto` varchar(100) NOT NULL default '',
`prev_foto` varchar(100) NOT NULL default '',
`popup_foto` varchar(100) NOT NULL default '',
`stitle` varchar(100) NOT NULL default '',
`title1` varchar(255) NOT NULL default '',
`title2` varchar(255) NOT NULL default '',
`title3` varchar(255) NOT NULL default '',
`title4` varchar(255) NOT NULL default '',
`title5` varchar(255) NOT NULL default '',
`title6` varchar(255) NOT NULL default '',
`title7` varchar(255) NOT NULL default '',
`title8` varchar(255) NOT NULL default '',
`title9` varchar(255) NOT NULL default '',
`id_firm` int(10) unsigned NOT NULL default '0',
`size` varchar(100) NOT NULL default '',
`id_foto` int(10) unsigned NOT NULL default '0',
`nal` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

=========================================
Есть таблица в которой создаются группы товаров:

=========================================

# Table structure for table 'subtypes'

CREATE TABLE `subtypes` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_type` int(10) unsigned NOT NULL default '0',
`title` varchar(255) NOT NULL default '',
`descr` text NOT NULL,
`ord` int(10) unsigned NOT NULL default '0',
`logoprev` varchar(100) NOT NULL default '',
`title_ru` varchar(100) NOT NULL default '',
`title_lv` varchar(100) NOT NULL default '',
`prev` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

=========================================

На странице выподающие меню со всеми производителями:

============================================
/ start SORT

echo " <table width=\"173\" align=\"center\" border=\"0\">\n";
echo " <tr>\n";
echo " <td class=gray align=right>" .$LNG['WARES_VIBOR']. "</td>\n";
echo " <td class=gray><select name=name onChange=location.href=this.options[selectedIndex].value >\n";
$query = "SELECT id, name FROM firm ORDER BY name";
if($name = mysql_query($query))
{
while(list($id, $id_firm)=mysql_fetch_array($name))
{
echo "<option value=\"index.php?lang=$lang&p=$p&id_type=$id_type&id_subtype=$id_subtype&id_firm=$id\" >" . $id_firm . "</option>";
}
} else puterror("error");
echo " </select></td>\n";
echo " </table>";

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

   
 
 автор: morkovkin   (05.11.2007 в 10:37)   письмо автору
 
   для: VladisOK   (04.11.2007 в 22:57)
 

Всего очень много, и всё как-то "накомкано". Единственное что могу сказать, что у Вас запрос к бд несколько не правильный для Ваших целей. Подправив его, всё пойдёт как по маслу. Не могу подправить, т.к. слишком всего много :) Надеюсь, кто-то поможет :)

   
 
 автор: VladisOK   (05.11.2007 в 20:58)   письмо автору
 
   для: morkovkin   (05.11.2007 в 10:37)
 

Ребят, ну помогите а - где-то рядом нахожусь с истиной - подправьте

   
 
 автор: ddhvvn   (05.11.2007 в 22:19)   письмо автору
 
   для: VladisOK   (04.11.2007 в 22:57)
 

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


Может, я невнимательно смотрел (пост очень "нагружен"), но я не нашел где же обозначена именно "данная группа товаров"

   
 
 автор: ronin   (06.11.2007 в 11:30)   письмо автору
 
   для: ddhvvn   (05.11.2007 в 22:19)
 

если я правильно понял, Вам нужен цикл к таблице товаров, буде там находится товар, вы запускаете цикл к таблице фирм, поэтому id фирм должен быть id_firm и вносится в таблицу товаров, для сверки.

   
 
 автор: cheops   (06.11.2007 в 12:04)   письмо автору
 
   для: VladisOK   (04.11.2007 в 22:57)
 

Можно воспользоваться левым объединением
SELECT firm.id, firm.name FROM firm LEFT JOIN wares ON firm.id=wares.id_firm
ORDER BY firm.name

   
 
 автор: VladisOK   (06.11.2007 в 13:14)   письмо автору
 
   для: cheops   (06.11.2007 в 12:04)
 

Нет так тоже не получается - в выподающем меню выводится длинный список по каждому товару ( он же производитель ) вобще:
-------
-------
-------
-------
AEG
AEG
AEG
AEG
AEG
AEG
Amica
Amica
Amica
Amica
Amica
Amica
и тд.

   
 
 автор: cheops   (06.11.2007 в 14:25)   письмо автору
 
   для: VladisOK   (06.11.2007 в 13:14)
 

Добавьте группировку
SELECT firm.id, firm.name FROM firm LEFT JOIN wares ON firm.id=wares.id_firm 
GROUP BY firm.name
ORDER BY firm.name

   
 
 автор: VladisOK   (06.11.2007 в 23:39)   письмо автору
 
   для: cheops   (06.11.2007 в 14:25)
 

Нет, в этом варианте запроса визуально всё осталось как в моём варианте

   
 
 автор: VladisOK   (07.11.2007 в 11:37)   письмо автору
 
   для: cheops   (06.11.2007 в 14:25)
 

Здесь выводиться весь список производителей, а надо только тех, товары которых находяться на открываемой странице - пример: Духовые шкафы / Электрические / ( на этой странице выводяться все товары с названиями производителей относящиеся к группе Электрические), а сверху окно с выподающим списком производителей, в котором должны находиться только те производители которые есть на этой странице, а не все вобще - в данный момент выводяться все которые занесены в таблицу FIRM

   
 
 автор: ronin   (07.11.2007 в 12:41)   письмо автору
 
   для: VladisOK   (07.11.2007 в 11:37)
 


$query=mysql_query("SELECT * FROM  wares  ORDER BY name");                                     
while($result=mysql_fetch_array($query) )
     { 
     $query5=mysql_fetch_array(mysql_query("SELECT * FROM firm WHERE id_firm='$result[id_firm]'"));

Вам нужно чтобы id_firm было как в таблице firm так и таблице wares а у вас в таблице firm - id, в то время как в таблице wares - id_firm.

   
 
 автор: VladisOK   (07.11.2007 в 13:43)   письмо автору
 
   для: ronin   (07.11.2007 в 12:41)
 


// start SORT
      
        echo "  <table width=\"173\" align=\"center\" border=\"0\">\n";
        echo "  <tr>\n";
        echo "    <td class=gray align=right>" .$LNG['WARES_VIBOR']. "</td>\n";
        echo "    <td class=gray><select name=name onChange=location.href=this.options[selectedIndex].value >\n";
 $query = mysql_query("SELECT * FROM  wares  ORDER BY name");                                      
     {  
     $query=mysql_fetch_array(mysql_query("SELECT * FROM firm WHERE id_firm='$result[id_firm]'"));

    if($name = mysql_query($query))  
        {  
while($result=mysql_fetch_array($query) ) 
        {   
      echo "<option value=\"index.php?lang=$lang&p=$p&id_type=$id_type&id_subtype=$id_subtype&id_firm=$id\" >" . $id_firm . "</option>";  
          }  
        } else puterror("error");
        echo "    </select></td>\n";
        echo "  </table>";
 
//end SORT


Что-то вобще страница не открывается - подправь ( наверно что-то напутал )

   
 
 автор: ronin   (07.11.2007 в 14:05)   письмо автору
 
   для: VladisOK   (07.11.2007 в 13:43)
 

блин! после каждого селекта if (!$result) echo mysql_error();


$query=mysql_query("SELECT * FROM  wares  ORDER BY name");                                      
while($result=mysql_fetch_array($query) ) 
     {  $query5=mysql_fetch_array(mysql_query("SELECT * FROM firm WHERE id='$result[id_firm]'")); 



while($result1=mysql_fetch_array($query) )  
        {  
echo "<option value=\"index.php?lang=$result1[lang]&p=$result1[p]&id_type=$result1[id_type]&id_subtype=$result1[id_subtype]&id_firm=$query5[id]\" >" . $query5[name]."</option>";   



если id осталось в таблице firm

   
 
 автор: VladisOK   (07.11.2007 в 15:10)   письмо автору
 
   для: ronin   (07.11.2007 в 14:05)
 

Опять пустая страница
Ты не можешь исправить мой код
Потому, что не ясно - я ошибаюсь или твой код не работает

// start SORT
      
        echo "  <table width=\"173\" align=\"center\" border=\"0\">\n";
        echo "  <tr>\n";
        echo "    <td class=gray align=right>" .$LNG['WARES_VIBOR']. "</td>\n";
        echo "    <td class=gray><select name=name onChange=location.href=this.options[selectedIndex].value >\n";      
        $query = "SELECT id, name FROM firm ORDER BY name";  

    if($name = mysql_query($query))  
        {  
          while(list($id, $id_firm)=mysql_fetch_array($name))  
        {   
      echo "<option value=\"index.php?lang=$lang&p=$p&id_type=$id_type&id_subtype=$id_subtype&id_firm=$id\" >" . $id_firm . "</option>";  
          }  
        } else puterror("error");
        echo "    </select></td>\n";
        echo "  </table>";
 
//end SORT

   
 
 автор: ronin   (07.11.2007 в 16:24)   письмо автору
 
   для: VladisOK   (07.11.2007 в 15:10)
 


// start SORT

        echo "  <table width=\"173\" align=\"center\" border=\"1\">\n";
        echo "  <tr>\n";

        echo "    <td class=gray><select name=name onChange=location.href=this.options[selectedIndex].value >\n";
        $query=mysql_query("SELECT * FROM  wares  ");
while($result=mysql_fetch_array($query) )
     {  $query5=mysql_fetch_array(mysql_query("SELECT * FROM firm WHERE id='$result[id_firm]'"));
   while($result1=mysql_fetch_array($query) )
        {
echo "<option value=\"$result1[id_firm]\" >" .$query5[name]."</option>";
         }
        echo "    </select></td>\n";
        echo "  </table>";
//end SORT

   
 
 автор: VladisOK   (07.11.2007 в 16:35)   письмо автору
 
   для: ronin   (07.11.2007 в 16:24)
 

Cтраница не открывается - мне кажеться где-то ошибка в коде

   
 
 автор: ronin   (07.11.2007 в 17:16)   письмо автору
 
   для: VladisOK   (07.11.2007 в 16:35)
 

Блин! сделал ошибку:

// start SORT 

        echo "  <table width=\"173\" align=\"center\" border=\"1\">\n"; 
        echo "  <tr>\n"; 

        echo "    <td class=gray><select name=name onChange=location.href=this.options[selectedIndex].value >\n"; 
        $query=mysql_query("SELECT * FROM  wares  "); 
while($result=mysql_fetch_array($query) ) 
     {  $query5=mysql_fetch_array(mysql_query("SELECT * FROM firm WHERE id='$result[id_firm]'")); 
   echo "<option value=\"$result1[id_firm]\" >" .$query5[name]."</option>"; 
         } 
        echo "    </select></td>\n"; 
        echo "  </table>"; 
//end SORT 

   
 
 автор: VladisOK   (07.11.2007 в 23:54)   письмо автору
 
   для: ronin   (07.11.2007 в 17:16)
 

Страница открывается и в выподающем меню список всех товаров во всех группах - товары обозначены не названиями а просто фирмой производителем:
Ariston
Ariston
Ariston
Ariston
Ariston
Elektrolux
Elektrolux
Elektrolux
Elektrolux
Elektrolux
и тд.
==================================================================
У меня сделанно так:
1. Сначало вручную создаю в администрировании ТИПЫ ( <a href=subtypes.php?lang=$lang&id_type=1>1.1 Группы / Духовые шкафы</a> )
2. Потом КАТАЛОГИ ( <a href=wares.php?lang=$lang&id_type=1>1.1. Каталог / Духовые шкафы</a> )
3. Потом ФИРМЫ ( <a href=firm.php> Фирмы</a> )

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

P.S. Названия php файлов одноимённые с названием таблиц.
Прикреплённый файл что-то не правильно прикрепился 8/

   
 
 автор: VladisOK   (08.11.2007 в 22:34)   письмо автору
 
   для: VladisOK   (07.11.2007 в 23:54)
 

ronin ti gde?
Davaj prodolzhim

   
 
 автор: VladisOK   (10.11.2007 в 23:01)   письмо автору
 
   для: VladisOK   (08.11.2007 в 22:34)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования