Autor | Zpráva | ||
---|---|---|---|
Lolita Profil |
#1 · Zasláno: 9. 12. 2006, 13:27:34
Resim tu s jednou pomerne uchylne navrzenou db a potreboval bych vyselectovat clovek.jmeno a clovek.prijmeni jako jmeno_prijmeni - proste jedno pole - pak to chci dat do default selectu v quickformu.
Neco jako select clovek.jmeno . clovek.prijmeni as celejmeno from clovek, snad me chapete, ale jak to udelat? |
||
nightfish Profil |
#2 · Zasláno: 9. 12. 2006, 13:29:28
pro mySQL:
select concat(jmeno, ' ', prijmeni) as jmeno_prijmeni from tabulka |
||
Lolita Profil |
#3 · Zasláno: 9. 12. 2006, 13:34:43
zkusim, ale tohle je oracle ...
|
||
nightfish Profil |
#4 · Zasláno: 9. 12. 2006, 13:48:43 · Upravil/a: nightfish
Lolita
zkusim, ale tohle je oracle... jak se to pozná? tak Oracle zřejmě umí concat jenom dvou stringů, takže select concat(concat(jmeno, ' '), prijmeni) as jmeno_prijmeni from tabulka |
||
Lolita Profil |
#5 · Zasláno: 9. 12. 2006, 13:55:47 · Upravil/a: Lolita
tak contact to vubec nezna a da se to poznat treba tak ze se k tomu pripojuju pres oci (:
ORA-00904: "CONTACT": neplatný identifikátor |
||
nightfish Profil |
#6 · Zasláno: 9. 12. 2006, 13:58:01
tak contact to vubec nezna
ne contact, nýbrž concat... da se to poznat treba tak ze se k tomu pripojuju pres oci (: což ovšem nikde v příspěvku uvedeno není ;-) |
||
Lolita Profil |
#7 · Zasláno: 9. 12. 2006, 14:01:13 · Upravil/a: Lolita
Ja vim ):, hned jak ste napsal, ze mysql tak me napadlo, ze sem neuvdl tak zakladni informaci jako je databaze pro kterou to potrebuju, stydim se a tim vic, ze uz ctu kraviny a pak se divim, ze to nejde, zkusim to ted uz snad dobre a uvidim jestli to pujde, diky za pomoc. Priste si zkusim dat vetsi pozor.
EDIT: super tak to funguje, diky moc! |
||
Kajman_ Profil * |
#8 · Zasláno: 10. 12. 2006, 18:13:38
V oracle je také možnost využít operátoru na spojování řetězců ||
|
||
Lolita Profil |
#9 · Zasláno: 11. 12. 2006, 22:08:45 · Upravil/a: Lolita
A ten funguje jak? Zkusil sem ( ( ( casopisy.nazev || ' (' ) || count(cisla.id) ) || ')' ) as nazev a nic moc \: na netu sem nasel poradne jen tohle a z toho jak to tam pouzivaj nejsem o moc moudrejsi http://www.stanford.edu/dept/itss/docs/oracle/10g/text.101/b10730/csql .htm
ale mam takovy blby tuseni, ze chyba bude jinde \: |
||
nightfish Profil |
#10 · Zasláno: 11. 12. 2006, 22:12:34
Lolita
zkusil bych select casopisy.nazev||' ('||count(cisla.id)||')' as nazev ... otázkou je, jestli není chyba někde jinde... |
||
Lolita Profil |
#11 · Zasláno: 11. 12. 2006, 22:26:22 · Upravil/a: Lolita
No tenhle select toho asi bez struktury db moc nerekne, ale i tak by tam snad mela byt videt chyba - count sem nikdy moc nechapal
ucel je takovy vypsat vsechny casopisy v tabulce casopisy a pak k nim do zavorky pocet clanku. No myslel sem ze by to nemo byt takhle, ale mozna bude potreba nejaky subselect, ze? ): |
||
ernesto Profil * |
#12 · Zasláno: 11. 12. 2006, 22:28:18
no nevim, oracle doma nemam a v práci sem na něm dlouho nedělal, ale nevidim moc vesele to lepení jednoho pole s agregační funkcí, takže střelba od boku:
select casopisy.nazev||'('||count(cisla.id)||')' from casopisy ... tady čuju nějakej inner join group by casopisy.nazev |
||
Lolita Profil |
#13 · Zasláno: 11. 12. 2006, 22:30:18 · Upravil/a: Lolita
Hmm! To zni nadejne matne si vzpomenim ze u mysql kdyz sem nekam daval count tak byl join a group by potreba. (:
|
||
djlj Profil |
#14 · Zasláno: 11. 12. 2006, 22:32:48
u mysql kdyz sem nekam daval count tak byl join a group by potreba
JOIN potřeba rozhodně není, ten je na připojování tabulek ;) |
||
ernesto Profil * |
#15 · Zasláno: 11. 12. 2006, 22:32:57
pokud tabulky clanek_v_cas, cisla a clanky nenapojíš na tabulku casopisy, tak ti to nebude fungovat nikdy
|
||
ernesto Profil * |
#16 · Zasláno: 11. 12. 2006, 22:33:51
djlj
no cement, snad už to vidíš |
||
djlj Profil |
#17 · Zasláno: 11. 12. 2006, 22:35:31
ernesto
Já vím. Reagoval jsem na to, že k COUNT je potřeba JOIN. |
||
ernesto Profil * |
#18 · Zasláno: 11. 12. 2006, 22:37:05
Lolita
join s tim nemá nic mos společnýho, ten tam je jen aby sis poslepoval ty související data, btw inner join a klauzule tabulka1.sloupec1=tabulka2.sloupec2 je totéž, jen ten join je elegantnější group by použij, určitě to bude fachat |
||
Kajman_ Profil * |
#19 · Zasláno: 11. 12. 2006, 22:38:11
Začněte se selectem, kde data budou v různých sloupečcích a budou správně. Pak je teprve zkuste spojit přes ||.
|
||
Lolita Profil |
#20 · Zasláno: 11. 12. 2006, 22:38:27
ernesto
No kdyz k tomu netlacim ten nazev tak me to vyslectuje docela pekne, stejne tak casopisy, ale asi myslis fakt propojeni to nejak silene joinout na sebe, takze to bude chtit zopakovat join a pouzivat hlavu ale jinak by to melo byt jak mam ted where tak to stejny joinovat na sebe join rightem, ne? |
||
ernesto Profil * |
#21 · Zasláno: 11. 12. 2006, 22:38:48
djlj
sory, sem si to až teď dobře přečet a pochopi, že to není na mě :) asi bych měl jít už spát, zejtra mě čeká tuhej boj s mssql |
||
ernesto Profil * |
#22 · Zasláno: 11. 12. 2006, 22:43:39
joinovat rightem nebo leftem - záleží na který straně je která tabulka účastnící se pojení. klíčová otázka: jakej sloupec v tabulce casopisy jí spojuje s nějakou jinou tabulkou (a příslušnej sloupec týhle tabulky) ?
|
||
ernesto Profil * |
#23 · Zasláno: 11. 12. 2006, 22:46:53
věštim, že je relace clanek_v_cas.casopis = casopisy.casopis, potom:
SELECT casopisy.id, casopisy.nazev||' ('||count(cisla.id||')' as nazev FROM casopisy, clanky, clanek_v_cas, cisla WHERE cisla.casopisy = 1 AND clanek_v_cas.cislo = cisla.id AND clanky.id = clanek_v_cas.clanek AND clanek_v_cas.casopis = casopisy.casopis |
||
ernesto Profil * |
#24 · Zasláno: 11. 12. 2006, 22:47:38
jo a ty joiny se nauč používat, vřele doporučuju. pro dnešek přeju dobrou noc
|
||
Lolita Profil |
#25 · Zasláno: 11. 12. 2006, 22:51:14 · Upravil/a: Lolita
no ja chapu ze jde o to to nagroupovat tak abych mel ve vysledku je radek pro casopis kde by bylo id jmeno a ten count
a uz v tom zacinam mit dost zmatek tak si to muzim napsat znova a uvedomit http://img81.imageshack.us/img81/8271/strukturadatabazewebexpkw7.png |
||
ernesto Profil * |
#26 · Zasláno: 12. 12. 2006, 09:33:06
no tak pokud to dobře chápu, tak ty dvě tabulky (clanky a clanek_v_cas) tam vůbec nepotřebuješ
pokud má ten select vysypat jen počet čísel jednotlivejch časáků, tak ti stačí SELECT casopisy.id, casopisy.nazev||' ('||count(cisla.id||')' as nazev FROM casopisy, inner join cisla on cisla.casopisy = casopisy.id [tady může bejt nějaká podmínka] group by casopisy.id tohle vysype ale jen časopisy, který mají aspoň jedno číslo, pokud chceš vybrat i časáky který nemají v tabulce cisla žádnej záznam, tak inner join přepiš na left outer join |
||
Lolita Profil |
#27 · Zasláno: 12. 12. 2006, 09:59:54 · Upravil/a: Lolita
Ne, ten select ma vypsat jmena vsech casopisu (tj. bez toho cisla.casopisy = 1) a knim pocet vsech clanku v kazdym casopise ...
|
||
ernesto Profil * |
#28 · Zasláno: 12. 12. 2006, 10:24:06
v každým časopise, nebo v kazdým čísle každýho časopisu ? kdyžtak nadhoď nějakej jednoduchej příklad.
|
||
Lolita Profil |
#29 · Zasláno: 12. 12. 2006, 10:53:43 · Upravil/a: Lolita
Ok, takze je treba casopis leo a gama a leo ma cisla 1 2 v cisle 1 sou clanky a b c d, v cisle 2 e f g. A clanek e muze byt zaroven v cisle 1 casoposu gama, takze proto je tam to clanek_v_cas ...
vysledek ma byt id casopisu, nazev casopisu a count clanku v nem 1, leo a 4 |
||
ernesto Profil * |
#30 · Zasláno: 12. 12. 2006, 11:13:06
neděláš náhodou na bohdalci (to mě napadlo kvůli tomu leu)?
zkus tohle: SELECT casopisy.id, casopisy.nazev||' ('||count(clanek_v_cas.id||')' as nazev FROM casopisy, inner join cisla on cisla.casopisy = casopisy.id inner join clanek_v_cas on clanek_v_cas.cislo = cisla.id [tady může bejt nějaká podmínka] group by casopisy.id |
||
Téma pokračuje na další straně.
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0