Manualai.lt Forumas
PHP ir SQL => PHP ir SQL - Klausimai ir pagalba => Temą pradėjo: ganjabest 2014-02-21 09:10:20 am
-
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)
-
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.
-
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
-
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)
gal tai pades
-
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 ;)
-
geriau karta pamatyt, nei 1000 isgirst ;)