Autor | Zpráva | ||
---|---|---|---|
RD Profil * |
#1 · Zasláno: 7. 8. 2006, 20:59:05
řeším problém s GROUP_CONCAT, přes LEFT JOIN připojím tabulku se sovisejícími články a přes GROUP_CONCAT je bez problému načtu. Potíž nastane tehdy, pokud se pokusím stejým způsobem připojit a nčíst další tabulku, data se mi pak množí několikrát místo jednoho záznamu... Nemáte s tímto zkušenost?
kód je takovýto: GROUP_CONCAT(DISTINCT news.nazev ORDER BY news.datum DESC SEPARATOR \"|\") AS news_nad LEFT JOIN news ON news.p = p.id AND news.datum <= NOW() |
||
Kajman_ Profil * |
#2 · Zasláno: 7. 8. 2006, 21:35:46
Možná ukažte celý dotaz (spojení s tou další tabulkou), problém bude asi tam.
|
||
RD Profil * |
#3 · Zasláno: 7. 8. 2006, 21:50:33
SELECT
akce_akce.*, akce_akce.id AS akce_id, DATE_FORMAT(akce_akce.start, GET_FORMAT(DATE,'EUR')) AS start, akce_mesta.nazev AS city, akce_kluby.nazev AS club, akce_kluby.id AS club_id, DAYNAME(akce_akce.start) AS den, GROUP_CONCAT(server_news.nazev ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nad, GROUP_CONCAT(server_news.nazevlink ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nadlink, GROUP_CONCAT(server_news.linkexterni ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_linkexterni, GROUP_CONCAT(server_news.id ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_id, GROUP_CONCAT(server_souteze.akce ORDER BY server_souteze.expirace SEPARATOR \"|\") AS sou, GROUP_CONCAT(server_souteze.id ORDER BY server_souteze.expirace SEPARATOR \"|\") AS sou_link, GROUP_CONCAT(server_clanky.nadpis ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_nad, GROUP_CONCAT(server_clanky.nadpislink ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_nadlink, GROUP_CONCAT(server_clanky.nadpislinkexterni ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_nadlinkexterni, GROUP_CONCAT(server_clanky.id ORDER BY server_clanky.datum DESC SEPARATOR \"|\") AS cla_id FROM akce_akce LEFT JOIN akce_mesta ON akce_mesta.id = akce_akce.mesto LEFT JOIN akce_kluby ON akce_kluby.id = akce_akce.klub LEFT JOIN server_news ON server_news.akce = akce_akce.id AND server_news.datum <= NOW() LEFT JOIN server_souteze ON server_souteze.akce = akce_akce.id AND server_souteze.expirace >= NOW() LEFT JOIN server_clanky ON server_clanky.akce = akce_akce.id AND server_clanky.datum <= NOW() WHERE akce_akce.start >= NOW() AND akce_akce.status <> 0 GROUP BY akce_akce.id ORDER BY akce_akce.start ASC, akce_akce.status DESC |
||
Kajman_ Profil * |
#4 · Zasláno: 7. 8. 2006, 21:57:34
A nevypadlo tam jen to slovíčko distinct v group_concat?
|
||
Kajman_ Profil * |
#5 · Zasláno: 7. 8. 2006, 22:22:20
No, ještě bych to asi řešil vnořenými dotazy na ty tabulky se záznamy 1:N...
LEFT JOIN (select server_news.akce GROUP_CONCAT(server_newsnazev ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nad, GROUP_CONCAT(server_news.nazevlink ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nadlink, GROUP_CONCAT(server_news.linkexterni ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_linkexterni, GROUP_CONCAT(server_news.id ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_id from server_news where server_news.datum <= NOW() group by server_news.akce ) tmp_news ON tmp_news.akce = akce_akce.id |
||
RD Profil * |
#6 · Zasláno: 8. 8. 2006, 00:02:37
Kajman_ : DISTINCT bylo první co mě napadlo ale to nepomůže
ten druhý dotaz vypadá zajímavě, ale bohužel při dosazení do mého nefunguje, tak trošku mi není jasné toto: tmp_news ON tmp_news.akce = akce_akce.id nemohls bys mě navést jak na to,chybu to neháže ale data z toho nevytáhnu :( |
||
Kajman_ Profil * |
#7 · Zasláno: 8. 8. 2006, 09:26:27
Ten ozávorkovaný select by měl vrátit pro každou akci jen jeden řádek. No, a nebude se dělat join se server_news, ale jen s tímto selectem pojmenovaným jako tmp_news...
SELECT akce_akce.*, tmp_news.* FROM akce_akce LEFT JOIN (select server_news.akce GROUP_CONCAT(server_newsnazev ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nad, GROUP_CONCAT(server_news.nazevlink ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_nadlink, GROUP_CONCAT(server_news.linkexterni ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_linkexterni, GROUP_CONCAT(server_news.id ORDER BY server_news.datum DESC SEPARATOR \"|\") AS news_id from server_news where server_news.datum <= NOW() group by server_news.akce ) tmp_news ON tmp_news.akce = akce_akce.id WHERE akce_akce.start >= NOW() Když se to zaonačí podobně i se soutěžemi a články, tak by ta násobnost mohla vypadnout. |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0