Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 01:26 04.07.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема WHERE ALL(story_status_sid)=2...MySQL въпрос.нови  
Автор Dakota (erotoman)
Публикувано07.02.04 19:04



Имам си таблица story_department:

CREATE TABLE `story_department` (
`story_sid` bigint(20) unsigned NOT NULL default '0',
`department_sid` mediumint(8) unsigned NOT NULL default '0',
`story_status_sid` tinyint(3) unsigned NOT NULL default '1',
UNIQUE KEY `story_sid` (`story_sid`,`department_sid`),
KEY `story_status_sid` (`story_status_sid`)
) TYPE=MyISAM


Тя ми се явява връзка между таблицата story и таблицата department, като освен връзка, съдържа в себе си story_status_sid, което е 1 или 2, контекстно на story и department.

Да речем, че в таблицата имам следните данни:


story_sid | department_sid | story_status_sid
1 1 1
1 2 1
1 3 2
2 2 2
2 3 2
...


Трябва ми такава заявка, която да ми изкара всички distinct story_sid, за които всички story_status_sid=2. Т.е. в дадения пример да ми изкара само story_sid=2.

Измислих някакъв hack с:

...GROUP BY
s.story_sid
HAVING
AVG(story_status_sid)=2


Обаче това не ми изглежда никак добре. Има ли по-чисто решение?

Версията ми е 4.0.17.

Everything louder than everything else...


Тема Re: WHERE ALL(story_status_sid)=2...MySQL въпрос.нови [re: Dakota]  
Автор salle (един такъв)
Публикувано08.02.04 12:02



"Трябва ми такава заявка, която да ми изкара всички distinct story_sid, за които всички story_status_sid=2"

SELECT DISTINCT story_sid
FROM story_department
WHERE story_status_sid = 2;



Тема Re: WHERE ALL(story_status_sid)=2...MySQL въпрос.нови [re: salle]  
Авторбaй Любo (Нерегистриран)
Публикувано08.02.04 22:56



Това ще върне и тези стор_ид за които има и статус=2 и статус=1, например стор_сид 1 в примера на дакота:
story_sid | department_sid | story_status_sid
1 1 1
1 2 1
1 3 2

Те трябва да се изключат ако правилно съм разбрал орг. въпрос:

SELECT DISTINCT а.story_sid
FROM story_department а
WHERE а.story_status_sid = 2
/* дотук добре -- както го беше започнал салле */
and not exists (select 1 from story_department b
where а.story_sid =b.story_sid
and b.story_status_sid != 2);

само дето не знам дали в мъсял има correlated subqueries.



Тема да, правилно си разбралнови [re: бaй Любo]  
Автор Dakota (erotoman)
Публикувано09.02.04 10:34



Лошото е че 4.0.17 не поддържа вложени селекти.

А начина, по-който съм го реализирал в момента е без WHERE story_status_sid=2, за да в общия result set да имам и 1, по този начин чрез AVG проверявам всички...само дето не съм сигурен дали при прекалено големи стойности, да речем 1х1 и 2000х2 няма да ми изкара AVG=2.

Everything louder than everything else...

Редактирано от Dakota на 09.02.04 11:41.



Тема Re: eх тези загадки ...нови [re: Dakota]  
Автор salle (един такъв)
Публикувано09.02.04 14:53



Аз ти отговорих на въпроса както ге беше задал.

Задавай си въпросите така, че да не се налага да ти отговарят с "Ако правилно съм те разбрал"

Не си новобранец в dir.bg все пак



Тема Re: да, правилно си разбралнови [re: Dakota]  
Авторбaй Любo (Нерегистриран)
Публикувано09.02.04 16:31



ми що не замениш средното с мин и макс:

...GROUP BY
s.story_sid
HAVING
/* AVG(story_status_sid)=2 */

min(story_status_sid)=2 and
max(story_status_sid)=2




Тема Re: eх тези загадки ... [re: salle]  
Автор Dakota (erotoman)
Публикувано09.02.04 17:23



"Трябва ми такава заявка, която да ми изкара всички distinct story_sid, за които всички story_status_sid=2."

Второто "всички" даже беше и болднато...

Ta, не се измъквай, а кажи сега има ли по-читав вариант за тази заявка?

Everything louder than everything else...


Тема Re: да, правилно си разбралнови [re: бaй Любo]  
Автор Dakota (erotoman)
Публикувано09.02.04 17:25



Да, това е сигурен вариант...още повече за моя частен случай 2 е най-високата стойност, така че мога и само min() да използвам.

И все пак, продължавам да си мисля, че би трябвало да има и друго решение...пък може и да няма, ама съм длъжен да попитам все пак.

Everything louder than everything else...


Тема Re: ами да де ...нови [re: Dakota]  
Автор salle (един такъв)
Публикувано09.02.04 18:49



Всички story_id за които всички story_status_sid=2 се превежда точно като

SELECT stort_id FROM tbl WHERE story_status_sid = 2;



Тема Re: а иначе ...нови [re: salle]  
Автор salle (един такъв)
Публикувано09.02.04 18:54



SELECT story_id, COUNT(DISTINCT story_status_sid) AS dc FROM tbl GROUP BY story_id HAVING dc = 1;

може да те наведе на някакви идеи




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.