Autor | Zpráva | ||
---|---|---|---|
lopota Profil * |
#1 · Zasláno: 13. 5. 2009, 13:12:12
Ahoj, lopotím se s jedním dotazem. Mám přístup na stránku (ucetID), kde je i fórum. Forum se dělí ještě na jednotlivé vlákna (forumID, dále ucetID).
Je tabulka s novým příspěvkama (tabulka prispevky s ucetID, userID, forumID) s časem zaslání DATETIME. Abych přihlášeným ukázal, že je ve fóru nová zpráva (a kolik), aniž by do fora vkročili (natož do jednotlivého vlákna fora), udělal jsem další tabulku (akce), kde jsou všichnu zaregistrovaní s údajem, kdy vstoupili do fóru, taky DATETIME. V tabulce akce je dále ucetID, userID, forumID. A ted bych chtěl, najít: "SELECT Ukaž mi počet zaslaných příspěvků ve fóru a čas poslední návštěvy uživatele ve fóru, WHERE které uživatel ještě nečetl (nevkročil do fóra)" Nějak na to nemůžu přijít, toto neukazuje správně: // vypiš pro všechny vlákna fóra $sql = "SELECT count(pr.`created`) pocet, vs.`datum` FROM `prispevky` pr, `vstupy` vs WHERE pr.`ucetID` = 1 AND vs.`userID` = 64 AND vs.`ucetID` = 1"; if($forumID!=false) { // jestliže chceme vypsat pro konkrétní vlákno $sql .= " AND vs.`forumID` = 3 AND pr.forumID = 3"; } $sql .= " GROUP BY pr.`ucetID` HAVING (UNIX_TIMESTAMP(pr.`created`)>UNIX_TIMESTAMP(vs.`datum`))"; |
||
lopota Profil * |
#2 · Zasláno: 13. 5. 2009, 13:14:01
Sorry za chyby, píšu na 9 palcovým netbk.
Nefunguje ani GROUP BY created |
||
lopota Profil * |
#3 · Zasláno: 13. 5. 2009, 13:19:47
CREATE TABLE `prispevky` ( `id` int(11) NOT NULL auto_increment, `forumID` int(11) NOT NULL, `ucetID` int(11) NOT NULL, `userID` int(11) NOT NULL, `isactive` tinyint(4) NOT NULL default '1', `text` text collate utf8_unicode_ci, `created` datetime NOT NULL, `rights` int(11) NOT NULL, `updated` datetime NOT NULL, `updateID` int(11) NOT NULL, `updatetext` text collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`), KEY `forumID` (`forumID`), KEY `isactive` (`isactive`), KEY `ucetID` (`ucetID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=0 AUTO_INCREMENT=14 ; CREATE TABLE `vstupy` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userID` int(11) NOT NULL, `ucetID` int(11) NOT NULL, `forumID` int(11) NOT NULL, `datum` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=0 AUTO_INCREMENT=10 ; |
||
TomášK Profil |
#4 · Zasláno: 13. 5. 2009, 14:26:06
Co se mi na tom nezdá?
* používáš HAVING místo WHERE. Nejdřív chceš vybrat jen příspěvky, které jsou novější než poslední uživatelova návštěva a pak teprv sčítat, ne naopak. * porovnávání dat jde i bez konverze na timestamp SELECT count(*) AS pocet, MAX(vs.datum) AS posledni_navsteva FROM prispevky pr JOIN vstupy vs USING(ucetID, forumID) WHERE pr.ucetId = 1 AND vs.userId = 64 AND pr.created > vs.datum /* AND vs.forumID = 3 */ Mylím, že nějak takhle |
||
lopota Profil * |
#5 · Zasláno: 13. 5. 2009, 14:31:54
Díky, super.
* porovnávání dat jde i bez konverze na timestamp - to jsem si nebyl právě jistej, díky |
||
TomášK Profil |
#6 · Zasláno: 13. 5. 2009, 14:48:55
Tento odstavec v dokumentaci chápu tak, že se to zkonvertuje automaticky. Řekl bych, že to i někde používám, ale ruku do ohně bych za to nedal:
MySQL automatically converts a date or time type value to a number if the value is used in a numeric context and vice versa. |
||
lopota Profil * |
#7 · Zasláno: 13. 5. 2009, 14:59:05
Hmm, ale nefunguje to, radši to ověřím, jestli něco nemám blbě.
|
||
Časová prodleva: 15 let
|
0