Autor Zpráva
Gecko
Profil *
Zdravím,
dejme tomu, že mám 2 sloupce a potřebuji je sloučit do jednoho (popř. vytvořit nový a starý smažu). Má to ale háček, mezi spojenými poli musí být mezera. Dá se to nějak natvrdo pomocí Adminera?

Díky
juriad
Profil
tabulka (sloupec1, sloupec2):
UPDATE tabulka SET sloupec1 = concat_ws(' ', sloupec1, sloupec2)
nahradí sloupec1 za slepenou hodnotu
Keeehi
Profil
Mít ve sloupci spojených několik není dobré. Zavání to špatným návrhem. Jaké sloupce chceš spojovat? Tipl bych si, že jméno a příjmení. Máš k tomu snad nějaký dobrý důvod?

Tento dotaz patří do databází.
Moderátor Str4wberry: Přesunuto.
Gecko
Profil *
Paráda! Díky moc, si hodnej :-)


Ano, jde o jména, příjmení a tituly před a po jméně (lékaři). Spojil jsem to z toho důvodu, že jsem měl jméno rozděleno prakticky do 4 polí.
Keeehi
Profil
Gecko:
To není moc chytré. Až v tom budeš chtít vyhledávat, to bude zábava. Až budeš chtít najít všechny doktory s příjmením Marek tak se ti do toho budou plést i ti, u kterých je to jméno. Vrať to zpátky co nejdříve. V budoucnu ti tento systém spojených jmen může přinést jen problémy.
jenikkozak
Profil
Keeehi:
To není moc chytré.
To přece nemusí platit obecně. Když do databáze ukládáš články, také je nemusíš za všech okolností rozdělovat na jednotlivá slova. To, že někdo ukládá do databáze jména, ještě neznamená, že bude někdy potřebovat přistupovat k jejich jednotlivým složkám. Příjmení „Marek“ se i tak dá dohledat snadno, pokud se křestní (rodné) jméno a příjmení ukládají vždy ve stejném pořadí.

V budoucnu ti tento systém spojených jmen může přinést jen problémy.
A nebo zjednodušení. Pokud víš, že je vždy budeš vypisovat kompletní. Ne všichni budují vyhledávání živnostníků. :)
Keeehi
Profil
jenikkozak:
Příjmení ‚Marek‘ se i tak dá dohledat snadno, pokud se křestní (rodné) jméno a příjmení ukládají vždy ve stejném pořadí.
A mohl by jsi to tedy napsat, když to jde snadno?

Pokud víš, že je vždy budeš vypisovat kompletní.
Problém je, že nikdy nevíš, co bude v budoucnu potřeba. Můžeš něco předpokládat, ale 100% jistotu nemáš nikdy.
jenikkozak
Profil
Keeehi:
A mohl by jsi to tedy napsat, když to jde snadno?
Zajisté.
SELECT * FROM jmena WHERE cele_jmeno LIKE '% Marek%' Křestní (rodné) jméno je na prvním místě, následované mezerou a příjmením.
SELECT * FROM jmena WHERE cele_jmeno LIKE 'Marek, %' Příjmení je psané na začátku, následované čárkou, mezerou a křestním jménem.

Problém je, že nikdy nevíš, co bude v budoucnu potřeba. Můžeš něco předpokládat, ale 100% jistotu nemáš nikdy.
Ovšem na základě této myšlenky bys musel i články ukládat po jednotlivých slovech. Jak bys jinak mohl třeba někdy v budoucnu vyhledat ty články, ve kterých je nějaké konkrétní slovo? Zkrátka stejně jako tady použiješ vyhledávání pomocí podřetězce nebo regulární výraz.
Keeehi
Profil
jenikkozak:
U prvního jsi zapomněl na tituly před jménem. U druhého nevím, jak se tituly píší, takže to nedokážu posoudit.

Text článku a jméno a příjmení je úplně něco jiného. Text je jeden celek a nemůžeš ho rozdělit na logické části. Kdežto u jména to jde. Tam jsou to jméno, příjmení, tituly před a tituly za jménem. Takové členění prostě u článku není.
jenikkozak
Profil
Keeehi:
U prvního jsi zapomněl na tituly před jménem
Nezapomněl, žádné tam nebyly. Šlo totiž o „křestní (rodné) jméno je na prvním místě, následované mezerou a příjmením.“ Verzi s tituly si můžeš doplnit sám. Stejně jako tě já nebudu zkoušet z toho, jak můžeš v databázi vyhledávat texty zapsané v jedné buňce pouze ty, které obsahují alespoň deset slov delších než 15 znaků.

U druhého nevím, jak se tituly píší, takže to nedokážu posoudit.
Uložit si je můžeš, chceš. Tituly běžně uváděné před jménem můžeš klidně po vzoru Ústavu pro jazyk český vkládat až za jméno. ;)

Text článku a jméno a příjmení je úplně něco jiného. Text je jeden celek a nemůžeš ho rozdělit na logické části. Kdežto u jména to jde.
Ze článku můžeš vyházet spoustu nepodstatných částí, zato rozděleném vlastního jména zaniká jeho schopnost označovat konkrétní jev. Obojí je tedy srovnatelné (nebo srovnatelné vůbec není), záleží jen na tom, jak se na to díváš.

Nemůžeš obecně říct, že rozložený tvar přináší jen problémy. Ve většině projektů není nutné jméno rozkládat na jednotlivé části. Naopak tam zbytečně přinášíš komplikaci tím, že je nutné jména zadávat pomocí 4 formulářů - tituly před jménem, křestní (rodná) jména, příjmení, tituly za jménem. Stejně jako nerozkládáš e-mailové adresy, URL a další řetězce, nemá smysl striktně přistupovat k rozsekávání jmen.
ShiraNai7
Profil
jenikkozak:
Nemůžeš obecně říct, že rozložený tvar přináší jen problémy.

Může.. např vyhledávání pomocí LIKE kde je % na začátku moc nevyužije indexy.
Je nesmysl přecházet z lepšího řešení na horší.
jenikkozak
Profil
ShiraNai7:
Může..
Ale vždyť nikdo neříkal, že chce v tom složeném tvaru vyhledávat konkrétní znění příjmení.
Gecko
Profil *
Tak uvedu konkrétní model, kde jsem úpravu použil:
http://www.vaszrak.cz/ocni-klinika-neovize-brno#lekari-tab

Vyhledávání neplánuji (zatím), jelikož lékařům přiřazuji čísla podle klinik. Vím, že tam mám mít čárku za příjmením, to se bude upravovat.
Keeehi
Profil
jenikkozak:
Nezapomněl, žádné tam nebyly.
Ale Gecko o nich psal. Sice na začátku chtěl spojovat dva sloupce, ale nepochybuji o tom, že spojil dohromady všechny čtyři. Nejspíše existuje regulár, který dokáže najít příjmení i ve sloupci, kde může nebo nemusí být titul před jménem. Ale vymýšlet se mi ho nechce. Taky proč, když bych to při 4 sloupcích vůbec řešit nemusel.

Naopak tam zbytečně přinášíš komplikaci tím, že je nutné jména zadávat pomocí 4 formulářů
To jak to uživatel zadává do formuláře nemusí mít vůbec žádnou souvislost s tím, jak je to uložené v databázi.

Stejně jako nerozkládáš e-mailové adresy, URL
Rozložená emailová adresa ani rozložené URL nemají samy o sobě smysl. Některé jejich části bez jiných mají nulovou informační hodnotu. Kdežto jméno nebo příjmení stojící samo o sobě nějakou informační hodnotu má.

Myslím si, že nadále se o tom bavit už nemá cenu. Podstatné už bylo řečeno
jenikkozak
Profil
Keeehi:
To jak to uživatel zadává do formuláře nemusí mít vůbec žádnou souvislost s tím, jak je to uložené v databázi.
Pokud dokážeš jméno správně rozřezat (tedy např. zjistit, jestli Pavel Petr má Petr jako příjmení, nebo jméno), není třeba, abys takto jména řezal hned při vkládání do databáze (s tím, že třeba to někdy využiješ), ale můžeš je rozdělit až tehdy, když víš, že rozložený tvar vůbec využiješ. Ale pokud ve všech případech používáš pouze jeden tvar, je naprosto zbytečné, abys jméno dělil.

Rozložená emailová adresa ani rozložené URL nemají samy o sobě smysl. Některé jejich části bez jiných mají nulovou informační hodnotu. Kdežto jméno nebo příjmení stojící samo o sobě nějakou informační hodnotu má.
Věc názoru.

Myslím si, že nadále se o tom bavit už nemá cenu. Podstatné už bylo řečeno
Správně. Ale vypadá podivně, když tohle napíšeš ve chvíli, když někdo nesouhlasí s tvými výroky. ;-)
Marek88
Profil
Gecko:
Vím, že tam mám mít čárku za příjmením, to se bude upravovat.
A to je přesně to, proč se vyplatí mít to rozdělené do více sloupců, pak by totiž stačilo jednoduše upravit výpis.
Gecko
Profil *
Marek88:
A to je přesně to, proč se vyplatí mít to rozdělené do více sloupců, pak by totiž stačilo jednoduše upravit výpis.

Ale prd při vší úctě. Při návrhu jsem myslel, že to využiju (filtrace, vyhledávání), dnes vím, že ne :-)
jenikkozak
Profil
Marek88:
Že se některé tituly píší za jménem, je ustálenou formou. Pokud ji někdo nezná, pokazil by obě řešení.
Když budou řetězce spojené správně, není na ně nutné desetiletí sahat. Když budou rozdělené, budeš je muset spojovat při každém vypsání znovu. (A při každém použití budeš muset dumat nad těmi čárkami.)
juriad
Profil
jenikkozak:
v takovém případě bych se přikláněl k denormalizaci, mít jméno, příjmení oddělené a zároveň i předpočítanou složenou variantu
proč jen ještě nikdo nenavrhl: jmena (id, jmeno), prijmeni (id, muzske, zenske), tituly (id, titul, poradi) [poradi = zapornejsi vlevo], osoba (jmeno_id, prijmeni_id, pohlavi), tituly_osoby (osoba_id, titul_id)
jenikkozak
Profil
juriad:
v takovém případě bych se přikláněl k denormalizaci, mít jméno, příjmení oddělené a zároveň i předpočítanou složenou variantu
Ale proč, proboha?
Získáš řetězec, např. „Václav Klaus“, chceš ho vždy vypsat jen jako řetězec „Václav Klaus“. Podle mne stačí vložit do databáze přímo tento řetězec: „Václav Klaus“. Stačí mi jedna jediná buňka.
Zatímco ty na takovou blbost potřebuješ 5 tabulek (možná 7, zapomněl jsi na to, že někdo může mít dvě křestní jména a dvě příjmení; snad 8 - na uložení oddělovače dvou příjmení, na uložení oddělovače zdvojených křestních jmen; nebo 10 na uložení předložky a místa, abys mohl uložit i Smil Flašku z Pardubic; či 11 pro pořadové číslo - pro Karla IV., Benedikta XVI...), které zřejmě vůbec nikdy nevyužiješ.
Vycházíme z totožného řetězce, to rozřezání na 5 tabulek můžeš udělat klidně později, až budeš vědět, že jej vůbec na něco využiješ.
Keeehi
Profil
jenikkozak:
Správně. Ale vypadá podivně, když tohle napíšeš ve chvíli, když někdo nesouhlasí s tvými výroky. ;-)
Tak klidně pokračuj. Jeden druhého však evidentně nepřesvědčíme a opakujeme tu dokola to samé. Proto mi přijde zbytečné se o tom nadále bavit. Gecko dostal podle mě dostatek informací z obou stran a snad už si to dokáže zhodnotit sám.
Gecko
Profil *
Dostal.
Děkuji za radu juriad, mohlo mi to :-)

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: