Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 1.939 pregleda

Najnovija ↓

promenljive u mySql-u 01.11.2010. u 09:17 · pre 194 meseca #1
Uprosceni model moje baze sastoji se od dve tabele

Code:
CREATE TABLE `categories`(
`cat_id` INT AUTO_INCREMENT NOT NULL,
`cat_title` VARCHAR(30) NOT NULL,
PRIMARY KEY(`cat_id`)
);

i
Code:
CREATE TABLE `forums`(
`forum_id` INT AUTO_INCREMENT NOT NULL,
`forum_title` VARCHAR(30) NOT NULL,
`cat_id` INT,
FOREIGN KEY `cat_id` REFERENCES categories(`cat_id`),
PRIMARY KEY(`forum_id`)
);


Ja hocu da vratim npr prvih n foruma iz svake kategorije i nasao sam neki upit koji obavlja ovo

Code:
    SELECT 
        cat_title,
        forum_title,
        cat_id,
        forum_id,
        @x:=CASE WHEN @y <> cat_id THEN 0 ELSE @x+1 END AS rn,
        @y:=cat_id
    FROM 
        (SELECT
            c.cat_id,
            c.cat_title,
            f.forum_id,
            f.forum_title
        FROM forums as f,categories as c WHERE f.cat_id=c.cat_id) c,
        (SELECT @x:=-1) a,
        (SELECT @y:=1) b


Ovo sto mi nije bas najjasnije su ove promenljive i to
Code:
 @x:=CASE WHEN @y <> cat_id THEN 0 ELSE @x+1 END AS rn,
          @y:=cat_id

Kako uopste ikada @y moze biti razlicito od cat_id kad @y upravo uzima vrednost cat_id.

Samo da napomenem da upit koristim za nesto drugo sa puno komplikovanijim tabelama a ovde sam radi jednostavnosti uprostio stvari ali sustina je ista.
Potpis
Kad covjeka napusti Sunce njegovog zavicaja ko ce mu posvijetliti na putu povratka
Re: promenljive u mySql-u 01.11.2010. u 10:49 · pre 194 meseca #2
Citat:
glamoc: Kako uopste ikada @y moze biti razlicito od cat_id kad @y upravo uzima vrednost cat_id.

Pa može kad naiđe red sa nekom drugom kategorijom, tačnije, red koji sadrži id kategorije različit od nekog prethodnog reda.
Re: promenljive u mySql-u 01.11.2010. u 11:12 · pre 194 meseca #3
btw Možda ti je ovakav upit lakši za razumevanje:
Code:
SET @br:=0, @trenutni_cat_id:=0;

SELECT rezultat.forum_id, rezultat.forum_title, rezultat.cat_id, rezultat.cat_title,
   IF(@trenutni_cat_id != rezultat.cat_id, @br:=1, @br:=@br+1) AS broj_redova, 
   IF(@trenutni_cat_id != rezultat.cat_id, @trenutni_cat_id:=rezultat.cat_id, 0)
FROM (
    SELECT f.forum_id, f.forum_title, c.cat_id, c.cat_title
    FROM categories c, forums f
    WHERE f.cat_id = c.cat_id
    ORDER BY c.cat_id, f.forum_id
) AS rezultat
HAVING broj_redova <= 2

To će ti dati po dva foruma iz svake kategorije, sortirana po njihovom id-u.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme