Autor Zpráva
lopota
Profil *
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 *
Sorry za chyby, píšu na 9 palcovým netbk.

Nefunguje ani GROUP BY created
lopota
Profil *
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
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 *
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
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 *
Hmm, ale nefunguje to, radši to ověřím, jestli něco nemám blbě.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: