Autor | Zpráva | ||
---|---|---|---|
Easygoer Profil |
#1 · Zasláno: 17. 7. 2024, 18:59:42
V MySQL mám dvě tabulky "klienti" a "zaznamy". CREATE TABLE IF NOT EXISTS `zaznamy` ( `id_zaznamu` int(5) NOT NULL AUTO_INCREMENT, `id_klienta` int(4) NOT NULL, `datum` datetime NOT NULL, `zaznam` text COLLATE utf8_czech_ci NOT NULL, `nedovolano` int(1) NOT NULL, PRIMARY KEY (`id_zaznamu`), FULLTEXT KEY `zaznam` (`zaznam`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; Nyní potřebuji, aby se mi zobrazil výpis těch klientů, jejichž poslední záznam má hodnotu nedovolano > 0 a zároveň je datum tohoto záznamu v rozmezí posledních 14 dnů. select concat(klienti.jmeno, ' ', klienti.prijmeni) as cele_jmeno, convert(zaznamy.datum, date) as datum from klienti, zaznamy where zaznamy.id_klienta = klienti.id_klienta and zaznamy.datum = max(zaznamy.datum) and zaznamy.nedovolano > 0 and convert(zaznamy.datum, date) between (select current_date - interval 14 day) and current_date order by datum; Tohle je samozřejmě špatně. Bohužel netuším, jak zapracovat funkci max(datum). Poradíte? |
||
Kajman Profil |
#2 · Zasláno: 17. 7. 2024, 19:16:13
Máte verzi databáze podporující window funkce? Tedy se podíváte na výsledek funkce version() a porovnáte s manuálem zvolené databáze
select version() from dual select row_number() over() poradi from dual |
||
Easygoer Profil |
version()
5.6.15-log Bohužel netuším, co dál... |
||
Kajman Profil |
Pokud nejde opusit 11 let starou verzi, tak to moc jednoduše a čitelně jen v sql nepůjde, nebo do toho zahrnout např. php a logiku si vyřešíte tam.
A jste si vůbec jistý zadáním? Když se mi spamer nedovolal před 13 dny, tak mě to vyplivne, i když mi už mezitím 3x volal a řekl jsem mu, ať mě už nikdy nevolá. Tedy mi zavolá po čvrté? |
||
Easygoer Profil |
#5 · Zasláno: 17. 7. 2024, 21:43:54
Díky za odpověď. Je to systém na obvolávání klientů. Chci si vytvořit přehled klientů, kterým jsem se nedovolal, abych jim zkoušel volat znovu.
Asi by šlo nainstalovat si nový Easy PHP Devserver, ale stejně nevím, jak to potom vyřešit. |
||
Kajman Profil |
#6 · Zasláno: 17. 7. 2024, 21:57:37
Zkuste to zkombinovat s Funkce max(datum) nevrací vždy správný výsledek
Nebo aktualizovat server. |
||
Easygoer Profil |
#7 · Zasláno: 17. 7. 2024, 22:02:44
Možná by mi úplně stačilo, kdybych (pro zjednodušení) dokázal vypsat id všech klientů, jejich poslední záznam má hodnotu nedovoláno > 0.
select id_klienta, max(datum) as datum, nedovolano from zaznamy group by id_klienta having nedovolano > 0 order by id_klienta Ve výsledku se bohužel ukazují i klienti, kteří mají záznamy s nedovolano > 0, ale ten poslední má nedovolano = 0. Nechápu, proč... |
||
Easygoer Profil |
#8 · Zasláno: 17. 7. 2024, 23:25:12
Tak už to funguje! Díky za tip "Zkuste to zkombinovat s Funkce max(datum) nevrací vždy správný výsledek"
SELECT CONCAT(klienti.jmeno, ' ', klienti.prijmeni) AS cele_jmeno, zaznamy.id_klienta, convert(zaznamy.datum, date) as datum FROM klienti, zaznamy WHERE zaznamy.id_klienta = klienti.id_klienta AND (zaznamy.id_klienta, zaznamy.datum) IN (select id_klienta, max(datum) FROM zaznamy group by zaznamy.id_klienta) AND zaznamy.nedovolano > 0 AND convert(zaznamy.datum, date) between (select current_date - interval 14 day) and current_date ORDER BY datum; |
||
Časová prodleva: 11 měsíců
|
0