Autor | Zpráva | ||
---|---|---|---|
Easygoer Profil |
#1 · Zasláno: 17. 7. 2024, 18:59:42
1V MySQL mám dvě tabulky "klienti" a "zaznamy". 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
nebo vyzkoušíte např. dotaz select row_number() over() poradi 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.
1select id_klienta, max(datum) as datum, nedovolano 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"
1SELECT CONCAT(klienti.jmeno, ' ', klienti.prijmeni) AS cele_jmeno, zaznamy.id_klienta, convert(zaznamy.datum, date) as datum 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: 9 měsíců
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0