Pomůžete s SQL dotazem?

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
ChrisTaylor
Level 2
Level 2
Příspěvky: 161
Registrován: duben 14
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod ChrisTaylor » 29 bře 2019 21:35

Tak jsem se pokusil něco vytvořit (není to perfektní, s SQL jsem začal teprve nedávno), využil jsem funkce MIN() a MAX() vzhledem k pravidlům preferencí. Dostupné k náhledu/vyzkoušení/inspiraci zde: http://sqlfiddle.com/#!9/959053/1.

Editace: Odstraněn odkaz na vyzkoušení pro nesprávnost dotazu, díky @petrmet za upozornění.
Naposledy upravil(a) ChrisTaylor dne 30 bře 2019 12:34, celkem upraveno 1 x.

Reklama
Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23603
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod ITCrowd » 29 bře 2019 23:05

Dík, rozhodně je to inspirace :-) Už jsem pochopil jak myslel min a max petrmet.
Ale použít to nepůjde...
Můžu si za to sám, protože jsem příliš zjednodušil tabulku. On totiž ten typ telefonu není jen firemní a soukromý... K tomu je tam ještě pevná linka práce, pevná linka domů a data, fax. A možná ještě něco, nač jsem nepřišel...
Bohužel mi to nepřišlo důležité, omlouvám se.
Ale rozhodně díky za stránky, vůbec jsem netušil, že něco takového existuje, můžu aspoň zkoušet :-)
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

petrmet
Level 3
Level 3
Příspěvky: 440
Registrován: leden 15
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod petrmet » 30 bře 2019 00:04

Dotaz :
SELECT
last_name,
phone_number,
MIN(number_type),
MAX(number_is_preferred)
FROM
contacts
GROUP BY
last_name;

je špatně, protože pokud grupuju, tak ve výsledku lze zobrazovat pouze pole, podle kterých grupuju a agregační funkce.
Pole phone_number to pak vypíše náhodnou hodnotu, což je nesmysl.

Poznámka k mému dotazu pro inspiraci :
předpokládal jsem podle zadání, že ve struktuře je údaj o prioritě kontaktu, přičemž 1 je nejvyšší priorita a 4 nejnižší, proto jsem použil min(typ_kontaktu) k vyhledání nejdůležitějšího kontaktu pro každého zákazníka.

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23603
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod ITCrowd » 30 bře 2019 07:49

Jasně :-) To by ale bylo moc jednoduchý :lol:
A měl bys nějaký nápad, jak řešit dotaz, když už teď víš upřesnění?
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

petrmet
Level 3
Level 3
Příspěvky: 440
Registrován: leden 15
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod petrmet » 30 bře 2019 10:50

Nevím, zda jsi navrhoval strukturu databáze nebo jsi dostal hotovou a jen potřebuješ zpracovávat určité údaje, ale pokud jsi v té druhé situaci, tak moje řešení by bylo takové :
-poznamenávám, že jsem zastáncem co nejjednodušších průhledných řešení, aby i v budoucnu bylo jasné, jak to funguje.

1. vytvořil bych si pohled s definovanými preferencemi pro jednotlivé klienty a kontakty :
create view kontakty as
select jmeno,cislo,
case
when typtel=1 and prefvol=1 then 1
when typtel=1 and prefvol=0 then 2
when typtel=2 and prefvol=1 then 3
when typtel=2 and prefvol=0 then 4
....
end preference
from tvojetabulka

2. použil bych dotaz, který jsem naznačil v mé první odpovědi :
select a.jmeno, b.mintyp, a.cislo
from kontakty as a
join
(select jmeno,MIN(preference) mintyp
from kontakty
group by jmeno) as b
on a.jmeno=b.jmeno and a.preference = b.mintyp

Samozřejmě místo pohledu se dá použít dočasná tabulka.

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23603
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod ITCrowd » 30 bře 2019 14:37

Díky za snahu :-)
Toto řešení taky nepoužiju. SQL dotaz je pro dispečerský sw, který žádné create neumožňuje. Dispečer má pak seznam k dispozici. Doposud se to vypisovalo ručně, chtěl jsem to přepsat do sql, aby se to při změnách aktualizovalo samo, ale zjevně je to větší oříšek, než bych čekal. Zvlášť, když bych si to třeba ve vbs dokázal napsat sám...
Zřejmě to nemá řešení. I tak všem díky za návrhy, kdybych snad na něco přišel, dám vědět. Nebo kdyby měl ještě někdo jiný nápad...
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

petrmet
Level 3
Level 3
Příspěvky: 440
Registrován: leden 15
Pohlaví: Muž
Stav:
Offline

Re: Pomůžete s SQL dotazem?

Příspěvekod petrmet » 30 bře 2019 15:16

Jen pro vysvětlení :
ten pohled Create view není součástí dotazu, ten se pouze jednorázově vloží do databáze (pokud nejsi majitelem nebo správcem databáze, stačí ho požádat). Je to pouze šablona, která umožňuje uživatelům zobrazovat data v požadovaném tvaru. Je to běžný postup při práci s databázemi, kdy chceš uživatelům zobrazovat nebo naopak skrýt některá data. Ty pak v aplikaci místo tabulky použiješ pohled.


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti