Autor Zpráva
jannek
Profil *
Ahoj, databáze a SQL nejsou zrovna můj šálek čaje. Potřeboval bych poradit jak vyřešit následující věc, jestli je to vůbec řešitelné. Zkoušel jsem to sám, ale moc se mi to nepodařilo (vůbec se mi to nepodařilo). Jde mi o následující:

Mám DB server, na něm mám tři weby, každý web má na tom server jednu MySQL databázi. V každé té databázi je tabulka articles, kde jsou uloženy články pro konkrétní web. Tabulka articles má v každé databázi stejnou strukturu. Do teď všechno dobrý, ale nyní se objevil požadavek, že by bylo potřeba vyselectit posledních 10 článků z každé té databáze (tabulky articles) a zobrazit je na novém 4. webu (že prý bude sloužit jako takový rozcestník).

Napadly mě následující řešení:
1) položit do každé databáze odpovídající dotaz (SELECT * FROM articles ... LIMIT 10 ...) a zpracovat to na straně PHP. Na tomto řešení mi vadí, že počet webů se možná rozroste a docela mě děsí představa, že jednou budu pokládat třeba 30 dotazů, i když by to mohl jen jeden.

2) použít pohled. Ale ten se mi s mými chabými znalostmi SQL nepodařilo sestavit. Potřebuju z každé té tabulky (databáze) vyselectnout název článku, jeho ID a samozřejmě k tomu připojit nějaký identifikátor (web1, web2, web3), abych věděl na kterou doménu (web) mám sestavit odkaz.

Samozřejmě do těch tří existujících webů nechci vůbec zasahovat a kvůli tomu výpisu je nějak upravovat.

Je to pomocí pohledu řešitelné, nebo ne?

Díky.
Kajman
Profil
Pokud budete na 4. webu přistupovat do databáze z účtu, který má oprávnění číst onu tabulky ze všech tří databází, můžete použít např.

(select 'web1' zdroj, id, nazev from nazevdatabaze1.articles order by id desc limit 10)
union all
(select 'web2' zdroj, id, nazev from nazevdatabaze2.articles order by id desc limit 10)
union all
(select 'web3' zdroj, id, nazev from nazevdatabaze3.articles order by id desc limit 10)
jannek
Profil *
Wow! Díky! O něčem podobném jsem neměl ani tušení. Děkuju! Zase jsem o něco chytřejší.

Tímto je tedy můj dotaz vyřešen. Kajmane, ještě jednou dík!

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:

0