Тема
|
свързани таблици....
|
|
Автор |
Topбaлaн (любопитко) |
Публикувано | 03.10.03 13:40 |
|
имам три таблици....една главна и две свързани та проблема ми е как да преброя записите в една свързана таблица а в друга да сумирам стойностите в едно поле, но без подзаявки....
за MySql 3.23.58 става дума...
Редактирано от Topбaлaн на 03.10.03 13:42.
|
|
Тема
|
Re: свързани таблици....
[re: Topбaлaн]
|
|
Автор | AcidMemory (Нерегистриран) |
Публикувано | 03.10.03 14:08 |
|
дай някакъв пример, че не те разбрах точно какво искаш да направиш ...
|
|
|
Нещо не загрях, какво искаш да направиш. Дай някакъв пример!
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
|
|
Тема
|
пример
[re: Topбaлaн]
|
|
Автор | torbalan (Нерегистриран) |
Публикувано | 03.10.03 14:37 |
|
SELECT memberpics.pic_name AS 'Заглавие',
________COUNT(comments.fromdate) AS 'Коментари',
________SUM(votes.vote) AS 'Точки',
FROM memberpics
________LEFT JOIN comments ON (memberpics.pic_id = comments.pic_id)
________LEFT JOIN votes ON (memberpics.pic_id = votes.pic_id)
GROUP BY memberpics.pic_id
ORDER BY memberpics.pic_id DESC
LIMIT 10
нещо подобно да речем.....
|
|
Тема
|
Re: пример ли?
[re: torbalan]
|
|
Автор |
salle (един такъв) |
Публикувано | 03.10.03 17:18 |
|
Ами какво ти пречи да го направиш?
|
|
|
защо искаш да набуташ всичко в едно запитване? направи си 2 помощни views и действай.
Ако много държиш да е в едно view то използвай nested selects. само, че не знам MySQL доколко е развит за такива работки. В Oracle бих написал нещо такова:
SELECT memberpics.pic_name AS 'Заглавие', memberpics.pic_id as picture_id,
(SELECT COUNT(comments.fromdate) FROM comments GROUP BY comments.pic_id HAVING comments.pic_id=picture_id ) AS 'Коментари',
(SELECT SUM(votes.vote) FROM votes GROUP BY votes.pic_id HAVING votes.pic_id=picture_id) AS 'Точки'ORDER BY memberpics.pic_id DESC
LIMIT 10
тук picture_id ти е нещо като global variable, който се автоподава като параметър в вътрешните запитвания...
... абе нещо такова - не казвам, че това, което съм написал е баш как-требе!
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
|
|
Тема
|
Re: пример
[re: torbalan]
|
|
Автор | zip (Нерегистриран) |
Публикувано | 03.10.03 19:15 |
|
мисля че не може да стане в една заявка (без да изполваш 2 вюта за резултатите или без вложени заявки)
ако беше само да ги пребройш Ок. с distinct по ключа в подчинените табици
ама за сумата незнам
sale изглежда като че ли има решение
ако му е възможно да го post-не :)
|
|
Тема
|
Re: пример
[re: torbalan]
|
|
Автор | AcidMemory (Нерегистриран) |
Публикувано | 04.10.03 14:42 |
|
а какво и има на заявката ???
тука набързо я нахвърлих същата към една инсталация на phpbb и си бачка като пушка ...
select a.pic_id, a.pic_title, count(ac.comment_id), sum(ar.rate_point)
from phpbb_album a
left join phpbb_album_comment ac on (a.pic_id = ac.comment_pic_id)
left join phpbb_album_rate ar on (a.pic_id = ar.rate_pic_id)
group by a.pic_id
order by a.pic_id desc
limit 10
|
|
|
ами не работи както аз искам...
има две свързани записи и съответно повече редове в отговора отколкото на мен ми трябват
и сбора от оценките и броя на коментарите в резултата не са верни...
нещо от този род ми трябва:
SELECT memberpics.pic_name AS 'Заглавие', memberpics.pic_id as picture_id,
(SELECT COUNT(comments.fromdate) FROM comments GROUP BY comments.pic_id HAVING comments.pic_id=picture_id ) AS 'Коментари',
(SELECT SUM(votes.vote) FROM votes GROUP BY votes.pic_id HAVING votes.pic_id=picture_id) AS 'Точки'ORDER BY memberpics.pic_id DESC
Редактирано от Topбaлaн на 06.10.03 09:21.
|
|
|
??? нещо си в грешка, бе човек
не може да ти се повтарят записи, след като left join-ваш по таблицата ...
постни данни от таблицата да видим - нещо не правиш както трябва или не те разбирам, но заявката (която ти написах) вади за всяка картинка сумата от оценките и сумата от коментарите към нея (принципно ще ти е по-полезно avg(от оценките), щото сумата няма какво да я правиш)
|
|
Тема
|
Re: и за sale
[re: Topбaлaн]
|
|
Автор | зъл oйлюфф (Нерегистриран) |
Публикувано | 06.10.03 11:55 |
|
определено това няма начин да работи както трябва
просто cartesian product-а от джойновете съдържа мултиплицирани редовете от двете свързани таблици
ако държиш да стане с една заявка пробвай да промениш структурата на таблиците - да обединиш двете свързани таблици или си направи заявките с темпова таблица
|
|
|
за това говоря....
|
|
Тема
|
мдам, разбрах какво ти трябва, ето ...
[re: Topбaлaн]
|
|
Автор | AcidMemory (Нерегистриран) |
Публикувано | 06.10.03 15:37 |
|
SELECT a.pic_id, a.pic_title, avg(ar.rate_point ), count(DISTINCT ac.comment_id )
FROM phpbb_album a
LEFT JOIN phpbb_album_comment ac ON ( a.pic_id = ac.comment_pic_id )
LEFT JOIN phpbb_album_rate ar ON ( a.pic_id = ar.rate_pic_id )
GROUP BY a.pic_id
ORDER BY a.pic_id DESC
LIMIT 10
мдам, моя грешка - не разбрах в началото и се подведох, признавам - но ето ти решение с една заявка (надявам се, че ти трябва avg-to от оценката, иначе за сумата просто в MySQL няма да стане)
|
|
Тема
|
и сумата става...
[re: AcidMemory]
|
|
Автор | зъл oйлюфф (Нерегистриран) |
Публикувано | 06.10.03 15:46 |
|
SELECT
m.pic_id,
m.pic_name,
COUNT(DISTINCT(c.fromdate)),
SUM(v.vote) / COUNT(DISTINCT(c.fromdate))
FROM memberpics m, comments c, votes v
WHERE
m.pic_id = c.pic_id
AND m.pic_id = v.pic_id
GROUP BY m.pic_id
|
|
Тема
|
Re: и сумата става...
[re: зъл oйлюфф]
|
|
Автор | AcidMemory (Нерегистриран) |
Публикувано | 06.10.03 16:27 |
|
абе да, става, ама трябва да се напише с еквивалента на decode от Оракъла в MySQL (иначе като е 0 сумата, става кофти) ...
|
|
Тема
|
Re: мдам, разбрах какво ти трябва, ето ...
[re: AcidMemory]
|
|
Автор |
Topбaлaн (любопитко) |
Публикувано | 07.10.03 08:42 |
|
доколкото оценките е само една - харесвами (в базата 1) средното аритметично ще е винаги 1
тъй, че или брой гласували или сума - в крайна сметка все тая...
|
|