Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите составить запрос

1.8K
17 августа 2005 года
BIKTOP
91 / / 06.04.2005
Есть 3 таблицы
adv_parent (key parent_id) - главное меню (напр., "Телефония", "Комп. техника", ... )
adv_section (key section_id, parent_id) - подменю каждого пункта главного меню
sell (key id, section_id) - таблица с объявлениями

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

Например так:

Телефония (35)
Комп. техника (23)
...

Всем заранее спасибо.
1.9K
17 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by BIKTOP
Есть 3 таблицы
adv_parent (key parent_id) - главное меню (напр., "Телефония", "Комп. техника", ... )
adv_section (key section_id, parent_id) - подменю каждого пункта главного меню
sell (key id, section_id) - таблица с объявлениями

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

Например так:

Телефония (35)
Комп. техника (23)
...

Всем заранее спасибо.


используй mysql_num_rows .....

338
17 августа 2005 года
chigevara
529 / / 29.09.2003
Цитата:
Originally posted by Ananim
используй mysql_num_rows .....


Это садизм с особым цинизмом. :D
COUNT(столбец) as name

1.8K
17 августа 2005 года
BIKTOP
91 / / 06.04.2005
Цитата:
Originally posted by chigevara
Это садизм с особым цинизмом. :D
COUNT(столбец) as name



Синтаксические конструкции SQL я и сам вроде как знаю. Я так и делал, как ты говоришь. Вот только не получается...

Люди если можете составте плз мне этот запрос. А то я иссяк.

15
17 августа 2005 года
shaelf
2.7K / / 04.05.2005
Дык уже написали:)
Вариант 1: SELECT COUNT(key) as co_key FROM adv_parent
Вариант 2 вытягиваешь результат и $result = mysql_num_rows($result)
Вариант 3: num_row = count($result) (это если результат в массив загонять.
Выбирай:).
1.9K
18 августа 2005 года
slider
81 / / 20.07.2004
Цитата:
Originally posted by BIKTOP
Есть 3 таблицы
adv_parent (key parent_id) - главное меню (напр., "Телефония", "Комп. техника", ... )
adv_section (key section_id, parent_id) - подменю каждого пункта главного меню
sell (key id, section_id) - таблица с объявлениями

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

Например так:

Телефония (35)
Комп. техника (23)
...

Всем заранее спасибо.


А какая вложенность подменю? Если более двух уровней - то наверное лучший выбор это рекурсии. Главное понять смысм рекурсий - а посчитать сам уже сможешь с помощью функции mysql_num_rows.

P.S. Здесь на codenet.ru где-то была статья про рекурсии. Поищи поиском.

338
18 августа 2005 года
chigevara
529 / / 29.09.2003
Цитата:
Originally posted by BIKTOP
Синтаксические конструкции SQL я и сам вроде как знаю. Я так и делал, как ты говоришь. Вот только не получается...


А я еще не сказал как ... :D
GROUP BY ты тоже знаешь? или подзабыл :D

1.8K
18 августа 2005 года
BIKTOP
91 / / 06.04.2005
Цитата:
Originally posted by chigevara
А я еще не сказал как ... :D
GROUP BY ты тоже знаешь? или подзабыл :D



По всей видимости вопрос недопонят.

Дело в том, что таблица с объявлениями (sell) связана с таблицей, содержащей пункты главного меню (adv_parent), через таблицу подпунктов (adv_section).

Я пробовал так:

SELECT adv_parent.*, COUNT(*)
FROM adv_parent, adv_section, sell
WHERE adv_parent.parent_id = adv_section.parent_id
AND adv_section.section_id = sell.section_id
GROUP BY sell.id

Выдает только строку с первым пунктом главного меню. Я их там 7 штук...

1.8K
18 августа 2005 года
BIKTOP
91 / / 06.04.2005
Цитата:
Originally posted by chigevara
А я еще не сказал как ... :D
GROUP BY ты тоже знаешь? или подзабыл :D



По всей видимости вопрос недопонят.

Дело в том, что таблица с объявлениями (sell) связана с таблицей, содержащей пункты главного меню (adv_parent), через таблицу подпунктов (adv_section).

Я пробовал так:

SELECT adv_parent.*, COUNT(*)
FROM adv_parent, adv_section, sell
WHERE adv_parent.parent_id = adv_section.parent_id
AND adv_section.section_id = sell.section_id
GROUP BY sell.id

Выдает только строку с первым пунктом главного меню. Я их там 7 штук...

15
18 августа 2005 года
shaelf
2.7K / / 04.05.2005
Может это и не совсем правильно (ну не силён я в бд, всё собираюсь нормальную книгу купить по теории. Кстати, может кто подскажет? Поль Дебуа есть), но я делаю для каждого меню свою таблицу и соеденяю их по id. Типа того: top_menu(name, id), next_menu(id, id_top_menu, name) и т.д. до любого уровня вложенности. Вывод выглядет примерно вот так:
Код:
$top_menu = mysql_query("SELECT * FROM top_menu");
while($print_top = mysql_fetch_array($top_menu)){
$top = $print[top];
echo $top."
\n\r"
;
$next_menu = mysql_query("SELECT name FROM next_menu WHERE id_top_menu = '$top'");
while($next = mysql_fetch_array($next_menu)) {
echo "         ".$next[name]."
\n\r"
;
}
}

ну короче что-то типа этого (могут быть где-то ошибки, так-как писАл сюда сразу).
Тут уже подсчитать просто:)
346
18 августа 2005 года
Новая папка
256 / / 24.12.2004
Цитата:
Originally posted by BIKTOP
По всей видимости вопрос недопонят.

Дело в том, что таблица с объявлениями (sell) связана с таблицей, содержащей пункты главного меню (adv_parent), через таблицу подпунктов (adv_section).

Я пробовал так:

SELECT adv_parent.*, COUNT(*)
FROM adv_parent, adv_section, sell
WHERE adv_parent.parent_id = adv_section.parent_id
AND adv_section.section_id = sell.section_id
GROUP BY sell.id

Выдает только строку с первым пунктом главного меню. Я их там 7 штук...



Ты конечно извени, но такой дурной структуры таблиц я ещё не видел! Как построишь базу - такой проэкт и будет.

Как бы я сделал
Создал таблицы:
categories
(
cid,
parent,
name
)

banners
(
bid,
...
cid
)

При такой структуре ты можешь создавать какую-хочешь структуру категорий.

вывод главного меню (у него parent=0)

$query = "SELECT * FROM categories ORDER BY cid";
загоняешь всё в массив, например $categories
$query = "SELECT cid,COUNT(cid) as coun FROM banners";
загоняешь всё в массив, например $banners

потом
$lastParent = 0;
$parAndChil = array();

function getChildren($parent_id)
{
global $categories,$lastParent;
for($i=0;$i<count($categories);$i++)
{
if($categories[$i]['parent']==$parent_id)
{
$parAndChild[$lastParent][]=$categories['cid'];
getChildren($categories['cid']);
}
}
}

for($i=0;$i<count($categories);$i++)
{
if($categories[$i]['parent']!==0)
break;
$lastParent = $categories[$i]['cid'];
getChildren($categories[$i]['cid']);
}

Всё, у тебя есть массив, в котором отсортированы родители и все их подкатегории. Теперь создаёшь функцию которая суммирует все объявления.
Я это не тестил, но вроде должно работать. Но если будут баги - на меня не кричать, тем более, что у меня температура)

1.8K
18 августа 2005 года
BIKTOP
91 / / 06.04.2005
Цитата:
Originally posted by Новая папка
Ты конечно извени ... но вроде должно работать. Но если будут баги - на меня не кричать, тем более, что у меня температура)



Спасибо. Вроде как понял... Надо будет попробовать.

А насчет дурной структуры, так для вложенности в 1 уровень вполне сгодится. Но критика вполне справедлива :).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог