mám fórum, které sestává z 2 tabulek:
tema-> 'tid' (klíč) 'nazev'
forum -> 'fid' (klíč) 'komentar' 'datum' 'tid'
tabulka forum obsahuje text příspěvku datum a 'tid' tématu ke kterému patří. Potřebuji vypsat seznam témat tříděných podle posledního příspěvku (jako tady na wz.cz). Nějak mi to nejde. Zkoušel jsem:
SELECT theme.* FROM theme INNER JOIN forum ON theme.tid=forum.tid ORDER BY forum.datum DESC LIMIT 20
ale to vypíše všecky příspěvky, já chci jen témata.
předem dík za rady.
a co nejakej DISTINCT na ty jednotlivy temata?
DISTINCT ? Slyším prvně. Koukám na to v manuálu a zatím z toho ňák moc chytrý nejsem.
SELECT DISTINCT tema.* FROM tema, forum WHERE tema.tid=forum.tid ORDER BY forum.datum DESC LIMIT 20
jsem zkusil a už se zdá, že to zabralo. musím to ještě pořádně ověřit zda to dělá co má.
Hmm, tak to nezabralo :o(
SELECT * FROM theme, forum WHERE theme.tid=forum.tid GROUP BY theme.tid ORDER BY forum.datum DESC LIMIT 20
bez záruky
Tak bohužel ani tohle neřadí podle posledního příspěvku.
Zkus to takto:
SELECT * , max( datum ) AS dat
FROM theme, forum
WHERE theme.tid = forum.fid
GROUP BY tid
ORDER BY dat DESC
Předpokládá se, že sloupec datum máš ve formátu DATE nebo DATETIME.
Furt nic :o( já bych to zapsal slovy jako:
Vyber všechno z "tema" a pro každý záznam z "téma" vyber maximální datum z "forum" kde forum.tid odpovídá tema.tid. Výsledný výběr z "tema" seřaď podle velikosti tohoto data.
Akorát stále nevím jak to MySQL zapsat.
prostě něco jako:
SELECT * FROM theme AND max( datum ) AS dat FROM forum WHERE forum.tid=theme.tid ORDER BY dat DESC
Co to znamená "Furt nic"? V čem je ten výpis špatně? Podle mě to dělá přesně to, co jsi popsal slovy. Zkus to v phpMyAdmin a podívej se, co z toho leze. Pak napiš konkrétně, co je špatně.
Furt nic znamená, že MySQL_Query vrací false. V adminovi se na mrknu. Good idea.
Přesné znění (to datum mám ve skutečnosti pojmenované blbě jako "age"):
SELECT * , max( age ) AS dat
FROM theme, forum
WHERE theme.tid = forum.tid
GROUP BY tid
ORDER BY dat DESC
LIMIT 0 , 30
MySQL hlásí: Chyba
#1052 - Column 'age' in field list is ambiguous
Dej sem strukturu tabulek. Jaké tam máš sloupce a jakého jsou typu.
Máš v tom age SKUTEČNĚ datum? Je ten sloupec typu DATE nemo DATETIME?
CREATE TABLE forum
(fid int NOT NULL AUTO_INCREMENT,
tid int(10) NOT NULL, -- tid tématu
author int(10) NOT NULL, -- uid registrovaného uživatele
email varchar(255) NULL, -- email neregistrovaného hosta
guest varchar(255) NULL, -- jméno neregistrovaného hosta
age datetime, -- datum příspěvku
upgrade datetime, -- datum aktualizace
comment text NOT NULL, -- text příspěvku
parent int(10) NULL, -- fid příspěvku rodiče
UNIQUE (fid),
PRIMARY KEY (fid))
CREATE TABLE theme
(tid int NOT NULL AUTO_INCREMENT,
author int(10) NOT NULL, -- uid registrovaného zakladatele
title varchar(255) NULL, -- nadpis tématu
email varchar(255) NULL, -- email neregistrovaného zakladatele
guest varchar(255) NULL, -- jméno neregistrovaného zakladatele
age datetime, -- datum založení
UNIQUE (tid),
PRIMARY KEY (tid))
Sloupce age a upgrade se vyplňují hodnotou NOW(), např:
INSERT INTO forum
(tid, author, email, guest, age, comment)
VALUES
($tid,$author,'$email','$guest',NOW(),'$text')
sloupec age je v obou tabulkach. mysql nevi, ktery pouzit. takze tam napis asi forum.age
To jsem zkoušel, ale taky to nezabralo.
a co to teda vratilo za chybu nebo co to udelalo? rict ze to nefunguje a nic vic k tomu, to se pak tezko radi, vis...
celý skript:
http://unas.unas.cz/page/P_forum.txt
jeho funkce:
http://unas.unas.cz/
a tam dole na liště použít odkaz "změnit styl" -> "grafitti" a pak to najdete na stránce:
http://unas.unas.cz/index.php?id=04
Jsem upřímně zvědavý, kolik se najde nadšenců, kteří se budou ze zábavy hrabat v cizím skriptu (navíc s operacemi v databázi, kterou nemají). Takovéto fórum funguje na principu konkrétní otázka -> konkrétní řešení, nebo odkaz na možná řešení. Není to ani výuka, ani placená podpora, ani služba typu "hej tady je můj nefungující skript, chci aby to dělalo to a to, najděte mi chybu".
Dobré rady, jak se ptát ve fóru je tady: http://stare.cz/otazky/
Např: "Je třeba vyjádřit se přesně. K tomu nestačí zakomponovat do otázky obrovské množství kódu nebo dat. "
Ta otázka byla položena přesně a jasně hned na začátku, ale nikdo asi na své stránce tenhle SQL dotaz nemá ani jeho jiné řešení nezná. Vůbec nechápu, že zrovny ty zbi se divíš, že sem dávám celý skript, kdyžs to byl právě ty, který si přesnou strukturu tabulek vyžádal. Pokud bys to vidět nechtěl, tak bych to sem nedával, poněvadž skript je složitý a bez znalostí jeho vazeb na ostatní součásti stránek nelze získat dostatečnou představu co se v něm děje.
Vis co stipe?
Ke kazdemu tematu si pridelej sloupecek datum posledniho vlozeneho prispevku a nebudes tady muset takhle carovat.
24k
Resp prozkoumej napr. MINIBB jak to ma reseno. Pak si vystacis se zakl. selecty
"Ta otázka byla položena přesně a jasně hned na začátku"
"mám fórum, které sestává z 2 tabulek:
tema-> 'tid' (klíč) 'nazev'
forum -> 'fid' (klíč) 'komentar' 'datum' 'tid'"
"to datum mám ve skutečnosti pojmenované blbě jako "age""
"sloupec age je v obou tabulkach"
--------------------------------------------------------------------
Byl jsem tak blbý, že jsem si takovou databázi vytvořil, abych ti odladil ten dotaz a FUNGOVAL! Takový dotaz není nic extra, běžně takové konstrukce spojování tabulek používám. Chtěl jsem strukturu tabulek, abych viděl, co přesně máš v tabulkách, protože ten SQL mi v pohodě fungoval.
Tvé odpovědi: "Nějak mi to nejde.", "Hmm, tak to nezabralo"
Ale dát sem komplikovaný skript... No jsem zvědavý, kdo ti poradí. Já si stojím za tím, že řešení už tady máš.