« 1 2 »
Autor Zpráva
Lolita
Profil
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
pro mySQL:
select concat(jmeno, ' ', prijmeni) as jmeno_prijmeni from tabulka
Lolita
Profil
zkusim, ale tohle je oracle ...
nightfish
Profil
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
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
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
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 *
V oracle je také možnost využít operátoru na spojování řetězců ||
Lolita
Profil
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
Lolita
zkusil bych select casopisy.nazev||' ('||count(cisla.id)||')' as nazev ...
otázkou je, jestli není chyba někde jinde...
Lolita
Profil
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

SELECT casopisy.id,
concat (concat (concat (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

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 *
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
Hmm! To zni nadejne matne si vzpomenim ze u mysql kdyz sem nekam daval count tak byl join a group by potreba. (:
djlj
Profil
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 *
pokud tabulky clanek_v_cas, cisla a clanky nenapojíš na tabulku casopisy, tak ti to nebude fungovat nikdy
ernesto
Profil *
djlj
no cement, snad už to vidíš
djlj
Profil
ernesto
Já vím. Reagoval jsem na to, že k COUNT je potřeba JOIN.
ernesto
Profil *
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 *
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
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 *
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 *
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 *
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 *
jo a ty joiny se nauč používat, vřele doporučuju. pro dnešek přeju dobrou noc
Lolita
Profil
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 *
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
Ne, ten select ma vypsat jmena vsech casopisu (tj. bez toho cisla.casopisy = 1) a knim pocet vsech clanku v kazdym casopise ...
ernesto
Profil *
v každým časopise, nebo v kazdým čísle každýho časopisu ? kdyžtak nadhoď nějakej jednoduchej příklad.
Lolita
Profil
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 *
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
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.

0