Materialized views in MySQL

Hej,

Eto, sem končno začel pisat tisti obljubljeni blog, nekaj postov je že na njem, pa začnimo kar s prvim.

Materialized views in MySQL

Komentarji seveda dobrodosli, na clanek seveda, komentarji na izvedbo bloga in njegov dizajn me trenutno ne zanimajo ;) Mogoce kdaj drugic v temi Recenzije spletnihi strani :P

74 odgovorov

Zakaj potem recimo tole

SELECT * FROM gslike WHERE idalbuma = NULL;

vrne nič vrstic pri taki bazi:

CREATE TABLE g_slike (
id int(11) NOT NULL autoincrement,
`id
albumaint(11) default NULL,
imedatoteketext NOT NULL,
PRIMARY KEY (
id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO
INCREMENT=50 ;

INSERT INTO g_slike (id, id_albuma, ime_datoteke) VALUES
(1, NULL, '2007-28-07-20-46-01-4940.jpg'),
(2, NULL, '2007-28-07-20-46-01-4188.png'),
(3, NULL, '2007-28-07-20-46-01-2847.jpg'),
(4, NULL, '2007-28-07-20-46-01-9298.jpg'),
(5, NULL, '2007-28-07-20-46-02-499.jpg'),
(6, 1, '2007-28-07-20-46-02-139.jpg'),
(7, 1, '2007-28-07-20-46-02-7963.jpg'),
.......

vsaka operacija, ki vkljucuje NULL je enaka NULL, torej (idalbuma = NUL) ni enako TRUE, ampak je (idalbuma = NULL) enako NULL...

(idalbuma IS NULL) je pravilna uporaba, ce zelis preveriti, ali ima idalbuma vrednost NULL...

BTW, to ti vse pise tam, kjer si rekel, da si bral:

In SQL, the NULL value is never true in comparison to any other value, even NULL. An expression that contains NULL always produces a NULL value unless otherwise indicated in the documentation for the operators and functions involved in the expression. All columns in the following example return NULL:

mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

Kapiram, hvala ;) .

Ni za kaj :)

Imam še eno vprašanje na katerega že dalj časa ne najdem odgovora, če je seveda sploh to izvedljivo in sicer, naprimer da imam neko tabelo s tri polji in podatki

_ id _| polje2

1|_ 2
2|_ 3
3|_ 2
...

In sedaj če iz tabele SELECTam ... DISTINCT (polje_2), dobim 2 in 3, vse lepo in prav, toda kako pa izbrati še ostale podatke ? Recimo da izberem DISTINCT (polje_2) kot v mojem primeru, pa je v arrayu še id ? Torej problem je da izbere samo vsebino polje2, id pa ne ... to da dobim samo vrstice pri katerih je polje2 različno je ok ....

Tukaj bi se ti pojavil nek drug problem, dobil bi le en ID, nekontrolirano katerega. Ti verjetno zelis priti do tocno dolocenega, ja? Verjetno uporaba DISTINCT v tvojem primeru niti ne pride v postev. Povej kaj tocno rabis, pa bomo zgruntali resitev.

Sej v bistvu niti ni pomemben id, tabela ima še več polji ... in rabim tiste podatke, id pa je lahko prvi oziroma zadnji če uporabim ORDER BY id ...

Lahko uporabis GROUP BY, ampak se vedno ne vidim smisla v vsem skupaj... Taksne poizvedbe so lahko blazno potratne, rajsi povej primer, ki ga potrebujes, da ti najdemo najbolj optimalno resitev...

V bistvu delam statistiko, oziroma popravljam tole kar že mam narejeno, pa vidim da bom moral vse še enkrat z nule narediti, pa se tokrat potrudit, sedajšnja je bolj tako ... :) drugače pa sem štel za obisk takole da če uporabnik ne obišče strani pa jo potem čez več kot 30 min znova obišče kot še en obisk itd... ampka vseeno rabim statistiko unikatov na dan, tam sem pač dal distinct na ip naslov ...

S tem Group pa nevem kaj vse se nebom dr*al zaradi statistike ampak bom lepo vse naredil še enkrat. Hvala vseeno ... aja v drugih primerih pa je šlo predvsem za to da nisem žele delati 2 tabel, tako so bile kategorije in vsebina v eni tabeli ... crap, ampak če je za celo stran samo 1 tabela ... zakaj bi se trudil pa delal 2 :D:D, pol sem ugotovil da je bolj zaj... če naredim samo z eno. :)

ampka vseeno rabim statistiko unikatov na dan

www.google.com/analytics/ :D