[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывести из БД инфу, связанные таблицы
amberlx
Помогите пож.
Например, есть две связанные таблицы:

Таблица RAZDEL:
IDraz
namer

и таблица CATEGORY:
IDcat
IDraz
namec

Можно-ли без вложенного цикла while вывести информацию из БД в таком виде:

razdel_1
cat_11
cat_12
razdel_2
cat_21
cat_22

И как это вообще правильно делается, есть же стандартный алгоритм??



Спустя 8 минут, 26 секунд (17.03.2009 - 17:14) sergeiss написал(а):
Где-то примерно так...

SQL
select razdel.namer, category.namecб razdel.idraz
from (select namer, idraz from razdel) razdel,
(select namec, idraz, idcat from category) category

where razdel.idraz=category.idraz

order by category.idraz, category.idcat


PS. А уже при выводе данных (в одном-единственном цикле) контролировать: если индекс раздела сменился, то выводим имя раздела; иначе - имя категории.

Спустя 1 час, 7 минут, 45 секунд (17.03.2009 - 18:22) Alchemist написал(а):
Один вопрос... Вот это:
SQL
...from (select namer, idraz from razdel) razdel,
(select namec, idraz, idcat from category) category...

это замена обычному
SQL
...from razdel, category...

?

Спустя 13 минут (17.03.2009 - 18:35) amberlx написал(а):
Вот, я сделел так:
PHP
$res mysql_query("
    SELECT
        razdel.namer, category.namec
    FROM
        razdel INNER JOIN category ON razdel.id = category.idraz
    ORDER BY
        razdel.namer, category.namec
"
);

$nr  '';
$onr '';
while(
$row mysql_fetch_assoc($res)) {
    
$nr $row['namer'];
    if (
$onr != $nr)
        echo 
$row['namer'].'<br>';
    echo 
' - '.$row['namec'].'<br>';
    
$onr $nr;
}

только если есть раздел а в нем нет категории, то имя раздела не показывается (его, я так понял, нет в запросе, что-ли?)

Спустя 7 минут, 54 секунды (17.03.2009 - 18:43) amberlx написал(а):
блин, надо заменить INNER JOIN
на LEFT OUTER JOIN, тогда нормально, спасибо

Спустя 3 часа, 48 минут, 24 секунды (17.03.2009 - 22:31) sergeiss написал(а):
Цитата (Alchemist @ 17.03.2009 - 18:22)
Один вопрос... Вот это:
SQL
...from (select namer, idraz from razdel) razdel,
(select namec, idraz, idcat from category) category...

это замена обычному
SQL
...from razdel, category...

?

Хм... Интересный вопрос smile.gif wink.gif biggrin.gif

Да, я тут погорячился немного. Я просто как раз незадолго до этого мудрил со сложными запросами из объемных таблиц, в которых сначала надо сделать подвыборку по нужным колонкам и ограничить количество строк какими-то условиями, чтобы не выбирать сотни тысяч строк, а ограничиться только несколькими тысячами или даже сотнями.
Вот и тут написал в том же духе smile.gif

Естественно, достаточно было именно так
SQL
...from razdel, category...
Быстрый ответ:

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