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

Форум MySQL

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

 

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

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

тема: Выборка из трех таблиц
 
 автор: sayber   (12.01.2010 в 06:11)   письмо автору
27.5 Кб
 
 

Как нижеследующую конструкцию можно реализовать одним запросом.
Пробовал "джоины", но тогда выводится результат не всего контента в древовидной структуре...
смотрите аттач., в нем структура БД и нужный мне результат.


  
$sql1 = "SELECT * FROM t_cat ORDER BY cposi";
$sql2 = "SELECT * FROM t_level_cat ORDER BY lposi";
$sql3 = "SELECT * FROM t_sub_cat ORDER BY sposi";
    
    $query1 = $db->query($sql1);
    $query2 = $db->query($sql2);
    $query3 = $db->query($sql3);
    
    

    while ($row = $db->get_array($query1))
    {

            $r .= $row1['ctitle'];

        while ($row2 = $db->get_array($query2))
        {
    
            if ($row2['lcid'] == $row['cid'])
            {
                $r .= $row2['ltitle'];
            }
            
            
            while ($row3 = $db->get_array($query3))
            {
    
                if ($row3['slid'] == $row2['lid'])
                {
                    $r .= $row3['stitle'];
                }

            }

        }
        
        

        

    }
    

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:20)   письмо автору
 
   для: sayber   (12.01.2010 в 06:11)
 

Ну вот реально, если ты такой крутой программер, что юзаешь классы там, где достаточно 1 строки кода, зачем тебе вообще чьи-то советы? Тебе по силам быть наставником даже у Бога

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:41)   письмо автору
 
   для: sayber   (12.01.2010 в 06:11)
 

как говорится, это писец, а писец не лечим.
$sql = "SELECT * ";
$sql.= "FROM t_cat AS c ";
$sql.= "LEFT JOIN t_level_cat AS l ON...чего-то там ";
$sql.= "LEFT JOIN t_sub_cat AS s ON...чего-то там ";
$sql.= "ORDER BY c.cposi, l.lposi, s.sposi ";

$result=mysql_query($sql) or die(mysql_error());
while ($sql_ar=mysql_fetch_assoc($result)) {
echo "<P>Мама мыла раму (Смотри букварь)\r\n";
}
mysql_free_result($result);

Собственно, весь код. Работает быстрее в несколько сотен раз ;)

  Ответить  
 
 автор: sayber   (12.01.2010 в 09:51)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:41)
 

Собственно я не говорил что крутой программер.
Классы как и любой код на пхп не проблема для меня а вот с sql туплю.

Я делал выборку примерно как ты указал выше но я не смог сделать как раз "чего то там..."

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:58)   письмо автору
 
   для: sayber   (12.01.2010 в 09:51)
 

Ты не указал как связаны таблицы. Вот я и написал "чего-то там". Привел какие-то принтскирины... русскими буквами написать можешь?

  Ответить  
 
 автор: Trianon   (12.01.2010 в 10:21)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:41)
 

В ORDER BY явно мало полей. Там еще должны быть стабилизирующие первичные ключи левых (в соединении) таблиц. Иначе если поля позиций не являются уникальными, отклик сервера может выдать несгруппированный ответ.

  Ответить  
 
 автор: Trianon   (12.01.2010 в 10:19)   письмо автору
 
   для: sayber   (12.01.2010 в 06:11)
 

В этом коде внутренние циклы (при втором проходе по внешним) попытаются бежать по уже вычерпанным Result-Set'ам (которые у Вас почему-то обозначены именами $query1...3 )

Структуру желательно приводить в виде дампа таблицы. Надо объяснять, почему?

  Ответить  
Rambler's Top100
вверх

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