ugrás a tartalomhoz

mezök összevonása

koka · 2006. Feb. 22. (Sze), 14.34
Sziasztok!

Valamit nem értek a mysql müködésében.

Van 3 mezöm ev, ho, nap. Erre csináltam egy indexet datum neven.
amikor kérek egy sort:

select * from table where datum > 20060101

akkor azt a választ kapom, hogy nincs datum mező.
Az tényleg nincs, de van ilyen index. Hogy kell
megfogalmaznom a lekérdezést?

koka.
 
1

Index <> mező

Poetro · 2006. Feb. 22. (Sze), 14.45
Van 3 mezöm ev, ho, nap

Ha ilyen mezőid vannak, akkor miért nem ilyenre hivatkozol?
Ahogy működne a select:

SELECT * FROM table WHERE ev > 2006 AND ho > 1 AND nap > 1
--------
Poetro
2

<Nincs cím>

koka · 2006. Feb. 22. (Sze), 14.58
Van 3 mezöm ev, ho, nap

Ha ilyen mezőid vannak, akkor miért nem ilyenre hivatkozol?
Ahogy működne a select:

SELECT * FROM table WHERE ev > 2006 AND ho > 1 AND nap > 1


mert a WHERE datum > 20060101 szebb. :-P

Koka.
3

:)

Anonymous · 2006. Feb. 22. (Sze), 15.00
ez elég zavaró, mert akkor majd ennek analógiájára csinálja meg a január 15. utáni dátumokat is:

SELECT * FROM table WHERE ev > 2006 AND ho > 1 AND nap > 15
ami ugyebár kizárja a február első felét is egyből...

koka: ha nincs különösebb indokod arra, hogy külön tárold az évet, hónapot, napot, akkor vagy date típusú mezőt használj, vagy unix timestampet, ami valójában egy egész szám.

gex
4

<Nincs cím>

koka · 2006. Feb. 22. (Sze), 15.14
ha nincs különösebb indokod arra,


Eh, nem dátumrol van szó, csak egyszerüsiteni akartam a kérdést.

Forum.

témacsoport ID
téma ID
beirás ID

a három együtt azonositja egyértelmüen a beirást.

Persze tudom ugy is, hogy
WHERE tcsID = n AND tID = n AND bID = n
de ha ki szeretném fejezni egy beirás egyértelmü azonositoját,
akkor $id = $tcsID.$tID.$bID és ekkor
WHERE id = $id;
Azt hittem az indexre is lehet WHERE, de ha nem akkor mi értelme
van az ilyen összekapcsolás lehetöségének?

Koka.
7

mi is az az index...

Anonymous · 2006. Feb. 22. (Sze), 15.48
témacsoport ID
téma ID
beirás ID

a három együtt azonositja egyértelmüen a beirást.

ha jól gondolom, az ID azonosítót takar, de akkor a beírás azonosításához miért nem elég a beírás ID?

Azt hittem az indexre is lehet WHERE, de ha nem akkor mi értelme
van az ilyen összekapcsolás lehetöségének?

az index nem mezők összekapcsolására szolgál, hanem lekérdezések gyorsítására.

gex
8

re: mezök összevonása

koka · 2006. Feb. 22. (Sze), 16.18
ha jól gondolom, az ID azonosítót takar, de akkor a beírás azonosításához miért nem elég a beírás ID?


mert nem egyedi. egy téma harmadik beirása nem harmadik az összes témacsoport, összes téma, összes beirásában.

az index nem mezők összekapcsolására szolgál, hanem lekérdezések gyorsítására.

Igen, már sejtem. :-)
Köszönöm a válaszokat, azt hiszem a CONCAT megfelelö lesz nekem.

Koka.
9

a helyedben...

Anonymous · 2006. Feb. 22. (Sze), 16.27
...én egyedi azonosítót adnék a bejegyzéseknek. azt, hogy a témához kapcsolódva ez hanyadik bejegyzés, már később is ki tudod számolni. de elég ha belegondolsz abba az esetbe, mi történik, ha törölsz egy bejegyzést? lesz utána 1-es, 2-es és 4-es sorszámú bejegyzésed? vagy mi történik, ha egy témát másik témacsoportba akarsz áthelyezni? módosítod az összes alatta lévő bejegyzést is?
valamint még azt is megjegyezném, hogy szerintem felesleges a bejegyzéshez letárolni a témacsoport azonosítóját. a bejegyzéshez tartozó téma azonosító egyértelműen azonosítja magát a témacsoportot is, ha egy témához csak egy témacsoport köthető.

táblák:

témacsoport:
- csoport_id
- csoport
- ...

téma:
- téma_id
- csoport_id
- téma
- ...

bejegyzés:
- bejegyzés_id
- téma_id
- bejegyzés
- ...

gex
10

<Nincs cím>

koka · 2006. Feb. 22. (Sze), 17.03
táblák:

témacsoport:
- csoport_id
- csoport
- ...

téma:
- téma_id
- csoport_id
- téma
- ...

bejegyzés:
- bejegyzés_id
- téma_id
- bejegyzés


Igen, megfontolandó amit irsz, lényegében még csak a tervezésnél tartok, bármikor vátoztathatom a strukturát.

Nekem most igy van:

témacsoport:
- sorszam auto increment
- csoport_id - index egyedi
- csoport
- bennelevő téma darabszám // hátha kell valamire

téma:
- sorszam auto increment
- csoport_id -- index |
-------------------------|-- index egyedi
- téma_id - index -----|
- téma
- bennelevő beirás darabszám // háha kell valamire

bejegyzés:
- sorszam auto increment
- csoport_id --- index |
- téma_id ------- index |-- index egyedi
- bejegyzés_id - index |
- bejegyző
- bejegyzés

Az egyedi indexek biztositják a konzisztenciát, azt nem tudom mi van,
ha törlésre, vagy áthelyezésre kerül egy bejegyzés. Nem lesz ilyen. :-)
...én egyedi azonosítót adnék a bejegyzéseknek

A bejegyzés->sorszám is lyukas lesz, ha törölnek egy bejegyzést, nem?

Koka.
11

de

Anonymous · 2006. Feb. 22. (Sze), 18.38
igen az lesz. de gondolom azért csináltad így a szerkezetet, hogy olyasmit csinálhass, ami pl itt a weblaboron is van a hozzászólásoknál, hogy mellé van rakva egy sorszám.
erre írtam azt, hogy azt nem kell mysql-ben tárolni, hanem majd amikor generálod az oldalt, akkor számolod ki.

gex
12

<Nincs cím>

koka · 2006. Feb. 22. (Sze), 20.00
erre írtam azt, hogy azt nem kell mysql-ben tárolni, hanem majd amikor generálod az oldalt, akkor számolod ki.


igen, majd a generálás megirásánál kiderül, hogy hogy egyszerübb,
legfeljebb kiveszem. :-) köszi a segitséget.

Koka.
5

Javítás

Poetro · 2006. Feb. 22. (Sze), 15.25

SELECT * FROM table WHERE 
 (ev = 2006 AND ho = 1 AND nap>15) ||
 (ev = 2006 AND ho > 1) ||
 (ev > 2006)
Vagy másik megoldás

SELECT *, CONCAT(ev, ho, nap) AS datum FROM table
 WHERE datum>20060102
Persze ezen esetben az ev, ho, nap mezőknek pontos mezőszélesség kell (4, 2, 2), és zerofill beállítás.
--------
Poetro
6

lpad...

Anonymous · 2006. Feb. 22. (Sze), 15.39

SELECT CONCAT(LPAD(ev,4,' '),LPAD(ho,2,' '),LPAD(nap,2,' ')) AS datum
  FROM table
  WHERE datum>'20060102';
persze csak kötözködöm. ;]

gex
13

Csak úgy dátum ügyben...

csla · 2006. Feb. 24. (P), 16.14
Arra gondoltam, nem lenne gyorsabb számokkal műveletet végezni, mint sztringekkel? :)

Tehát pl.:

SELECT ... FROM table WHERE ev*10000+ho*100+nap > 20060102

Hm? :D
14

hmmmm

Anonymous · 2006. Feb. 24. (P), 18.24
ön nyert! :]

gex