Autorius Tema: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles  (Skaityta 263 kartus)

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 962
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Neisprendziu niekaip galvosukio su SQL uzklausa.

Turiu nuorodoje kategorija tarkim : baldai
Tada einu i lentele kategorijos (joje yra visos kategorijos ir subkategorijos) . Nuejes pagal turima kategorija pasimu visas subkategorijas

<?php
$sql 
"SELECT subc.* FROM categories as c LEFT JOIN categories as subc ON subc.parent = c.id ";
?>


Dabar man prie sitos uzklausos reikia prijunkti sekancia lentele tarkim prekes pagal subc.kategorija . Lenteleje prekes yra stulpelis pavadintas kategorijos. Ten yra kelios kategorijos todel reikia naudoti LIKE. Tada reikia suskaiciuoti kiek yra prekiu kiekvienai kategorijai. Ir jeigu kategorija neturi prekiu tos kategorijos tiesiog nespausdinti.

Zodziu pavaizduosiu israiska(skliausteliuose prekes):

Kategorija:
---Subkategorija (23)
Kategorija2:
---Subkategorija (3)
« Paskutinį kartą keitė: 2014-02-21 09:13:27 am sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #1 Įrašytas: 2014-02-21 11:30:13 am »
visu pirma jei jau darai skaiciavima kiek irasu grazina uzklausa, tai dek COUNT() nes kitu atveju tu i ramus sukrauni visus rezultatus ir darai dar papildomus veiksmus su jais, tai apkrauni ir cpu ir ram'a. o LIKE naudok tada kai reikia tau ir %, kai ieskai pagal dali reiksmes, o jei tiksliai zinai kokios reiksems ieskai, naudok tiesiog field = 'value' greiciau veiks.
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 962
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #2 Įrašytas: 2014-02-21 11:41:52 am »
Nu jo suprantu, kad su COUNT skaiciuot ir t.t. LIKE reikalingas, nes cia pagal filtrus . Bet esme ta kad nebesuprantu kaip teisingai prijungt paskutine lentele(suformuluoti uzklausa), kad pagal rastas reiksmes man rodytu kiek ju yra ir rodytu arba nerodytu kategorijas(priklausomai nuo to ar rasta reiksmiu) . Bandziau tiesiog kazkaip taip:

<?php
JOIN prekes 
as p ON p.field LIKE CONCAT('%','subc.kategorija','%') AND p.field LIKE ..... 
?>


Bet toliau galva nedirba

P.S. p.field - kazkas tokio kategorija:pavadinimas:gamintojas:ir t.t.  Cia po to pagal nuoroda i sita laukeli ziuriu ir filtruoju irasus, kad nereiktu per visus eit atskirai ir del to kad nuoroda pvz: host/kategorija/gamintojas arba gali buti ir host/gamintojas/kategorija
« Paskutinį kartą keitė: 2014-02-21 11:49:01 am sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #3 Įrašytas: 2014-02-21 12:50:11 pm »
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

gal tai pades
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #3 Įrašytas: 2014-02-21 12:50:11 pm »

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 962
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #4 Įrašytas: 2014-02-21 17:07:08 pm »
Of course !! INNER JOIN  :-[  ir kabuciu i CONCAT per daug pridejau

<?php
$sql 
"INNER JOIN prekes as p ON p.field LIKE CONCAT('%',subc.kategorija,'%') GROUP BY subc.kategorija"
?>


Aciu! Ta tavo nuoroda tikrai atvere akis  ;)
« Paskutinį kartą keitė: 2014-02-21 18:46:16 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #5 Įrašytas: 2014-02-21 19:06:18 pm »
geriau karta pamatyt, nei 1000 isgirst ;)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: [klausimas] Kaip taisyklingai suskaiciuoti irasus naudojant dvi lenteles
« Atsakymas #5 Įrašytas: 2014-02-21 19:06:18 pm »