помоооооощ

9 отговора 409 прегледа
#1

помоооооощ

Имам таблица "Учебници".
Тя съдържа много неща, по-важните от които са "заглавие"(текст),"стар"(1/0),"нов"(1/0);

Трябва да изкарам нещо от вида:
Заглавие----------Стар----------Нов
----------------------------------------
Еди какво си----------5----------11
Еди какво си----------1----------8
Еди какво си----------6----------3

т.е. сортирани по "Нов", групирани по заглавие и с преброени "Стар"

SELECT title,COUNT(*) as how FROM books GROUP BY title ORDER BY how DESC ми върши работа дотам, че ми групира по заглавие и брои новите, но се опитвам в същата заявка да преброя и старите... :( Ама не знам как

mysql 4.0.18

Помощ !

Отговор
в отговор на Cтyдeнт #2

допълнение

Относно това:

"SELECT title,COUNT(*) as how FROM books GROUP BY title ORDER BY how DESC ми върши работа дотам, че ми групира по заглавие и брои новите, но се опитвам в същата заявка да преброя и старите... :( Ама не знам как"
,
което всъщност ми групира и сортира само по заглавие ... имах в предвид:
SELECT title,COUNT(*) as how FROM books WHERE new='1' GROUP BY title ORDER BY how DESC
Така броя всяко ново заглавие, но няма как в същото време да броя и колко пъти го има като ново :(

Отговор
в отговор на Cтyдeнт #3

Re: UNION

... UNION ORDER BY .... how ASC ...

salle.online.bg/sig
Отговор
в отговор на salle #4

Re: UNION

Не ми върши работа тъй като увеличава броя на записите в набора редове, а аз трябва да итерирам през него ... така примерно за един и същ учебник ще изпринтя 2 реда - един със заглавие, стари броеве и доста по-надолу - заглавие и нови броеве. Няма ли как да преброи новите в същата заявка ?

Отговор
в отговор на Cтyдeнт #5

tyi mai stava

SELECT b.title,(select count(*) from books where old=Yes and title=b.title group by title) as old ,
(select count(*) from books where new=Yes and title=b.title group by title) as new
FROM books b
group by b.title;

Отговор
в отговор на bogosian #6

Re: tyi mai stava

Перфектно е, но май не се поддържа от версията на mysql, която използвам (4.0.18). Мерси все пак :(

Отговор
в отговор на Cтyдeнт #7

Re: помоооооощ

Според мен си в грешка още в конструкцията ама ти си знаеш
стар и нов са алтернативи - няма как хем да е ста хем да е нов
сложи ги в една колона 1 - стар, 0 - нов
по-нататък сам се сещаш как да стане
Представи си, че сетнеш и двата в 1 ци, ко става тогава - инконсистентност т.е. при твоя вариан тряа да имаш и констрейнт който да предотврати подобно нещо

Отговор
в отговор на Cтyдeнт #8

Re: помоооооощ

SELECT title, SUM(star), SUM(nov) FROM books GROUP BY title

Ако не ще да ти ги сумира виж как можеш да кастнеш сет-а (0/1) към интежер

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на URL-a #9

Re: помоооооощ

Прав си, че може би наистина таблицата не е перфектно нормализирана ... в думите ти има истина ... и все пак обаче има вариант да стане, това което ми трябва. Главната причина, поради която не определям дали един учебник е стар/нов в една колона, е че във всеки един момент може да се появи нова категория. (примерно) :))

Отговор
в отговор на ro6avia #10

да !

Евала бате ... не мога да повярвам, че става толкова просто :))
Как не съм сетил не знам :)

SELECT title, SUM(new='1'), SUM(old='1') AS HOW FROM book GROUP BY title ORDER BY HOW DESC

Това е, което търсех :)

P.S. Мерси за всички постове

Отговор