[ peca89bg @ 09.10.2012. 00:23 ] @
Zdravo svima,

DB dump je u prilogu.

Ovim upitom izvlacim sve iz baze:
Code (sql):

SELECT
    main_section.naziv_fr AS main_section_naziv,
    sub_section_1.naziv_fr AS sub_1_naziv,
    sub_section_2.naziv_fr AS sub_2_naziv,
    sub_section_2.des_fr AS sub_2_des,
    sub_section_2.rich_des_fr AS sub_2_rich,
    sub_section_2.rich AS ima_texta,
    sub_section_2.linked, sub_section_2.url,
    sub_section_2.link_fr AS anchor,
    sub_section_3.text_fr AS sub_3_text
        FROM
            main_section JOIN sub_section_1 ON main_section.id= sub_section_1.id_main
            JOIN sub_section_2 ON sub_section_2.id_sub_1 = sub_section_1.id
            JOIN sub_section_3 ON sub_section_3.id_sub_2 = sub_section_2.id
                WHERE
                    main_section.naziv_fr LIKE '%%' OR
                    sub_section_1.naziv_fr LIKE '%%' OR
                    sub_section_2.naziv_fr LIKE '%%' OR
                    sub_section_2.des_fr LIKE '%%' OR
                    sub_section_2.rich_des_fr LIKE '%%' OR
                    sub_section_2.link_fr LIKE '%%' OR
                    sub_section_3.text_fr LIKE '%%'
 


I to lepo radi ali samo donekle.

Kada trazim 'main_naziv " id je 3 iz tabele main_section, u tabeli sub_section_1 imam dete za ovaj ovaj id a to su 13 i npr 14 i dalje u tabeli sub_section_2 imam redove ciji je parent id 13 i 14 iz tabele sub_section_1. E sada ovde nastaje problem jer mi se vrate svi redovi u kojima kolona naziv_fr nije blank a gde je blank te redove mi preskoci i ako za te redove uredno stoje parent id-s 13 ili 14.

Nije best projektovano ali radi mi posao skroz ok za moju app za ostale stvari ali eto ova pretraga me ubi u pojam.
Ne znam koliko sam dobro objasnio jer me glava uzasno mnogo boli posle bakcanja cele veceri oko ovoga :) :)

Recimo kada mi search term = '' treba da mi vrati sve iz baze ali mi vraza za nekih 15 komada manje a to su upravo oni redovi u kojima mi je naziv_fr ili naziv_en u sub_section_2 prazan.
Mozda je sada jasnije :)




[Ovu poruku je menjao peca89bg dana 09.10.2012. u 15:09 GMT+1]
[ bogdan.kecman @ 09.10.2012. 06:15 ] @
sada nikako ne mogu da stignem da pogledam ovaj sql ali osnovno pitanje je da li ti je naziv_fr "prazan" (dakle "") ili ti je naziv_fr NULL ?

NULL like '%%" nije tacno, tu onda moras da uradis nesto tipa ako ti je prazan searchterm da uradis umesto like '%%', is null posto ako imas where like ... tu nikad neces dobiti vrednosti koje su prazan string...

brzo resenje ti je da te kolone stavis da budu not null defauilt '' i onda ce da budu prazne umesto null pa ce like '%%' da radi
[ peca89bg @ 09.10.2012. 13:43 ] @
@bogdan.kecman

to sam prvo uradio ali opet nece.
Isto vraca 28 a treba 43, tih 15 su bas gde je naziv prazan.
[ peca89bg @ 09.10.2012. 13:58 ] @
Mislio sam da je do sub_section_3 tabele jer i nju joinujem a bas tih 28rows su u njoj.
Sada kada sam je sklonio iz pretrage, opet isto, nikako da uhvati gde je naziv_en ili naziv_fr = '' iz tabele sub_section_2
[ djoka_l @ 09.10.2012. 14:03 ] @
Kada je search term prazan:

Code (sql):

SELECT
    main_section.naziv_fr AS main_section_naziv,
    sub_section_1.naziv_fr AS sub_1_naziv,
    sub_section_2.naziv_fr AS sub_2_naziv,
    sub_section_2.des_fr AS sub_2_des,
    sub_section_2.rich_des_fr AS sub_2_rich,
    sub_section_2.rich AS ima_texta,
    sub_section_2.linked, sub_section_2.url,
    sub_section_2.link_fr AS anchor,
    sub_section_3.text_fr AS sub_3_text
        FROM
            main_section JOIN sub_section_1 ON main_section.id= sub_section_1.id_main
            JOIN sub_section_2 ON sub_section_2.id_sub_1 = sub_section_1.id
            JOIN sub_section_3 ON sub_section_3.id_sub_2 = sub_section_2.id
 


Koliko komplikovano to može biti?
[ peca89bg @ 09.10.2012. 14:06 ] @
Citat:
djoka_l: Kada je search term prazan:

Code (sql):

SELECT
    main_section.naziv_fr AS main_section_naziv,
    sub_section_1.naziv_fr AS sub_1_naziv,
    sub_section_2.naziv_fr AS sub_2_naziv,
    sub_section_2.des_fr AS sub_2_des,
    sub_section_2.rich_des_fr AS sub_2_rich,
    sub_section_2.rich AS ima_texta,
    sub_section_2.linked, sub_section_2.url,
    sub_section_2.link_fr AS anchor,
    sub_section_3.text_fr AS sub_3_text
        FROM
            main_section JOIN sub_section_1 ON main_section.id= sub_section_1.id_main
            JOIN sub_section_2 ON sub_section_2.id_sub_1 = sub_section_1.id
            JOIN sub_section_3 ON sub_section_3.id_sub_2 = sub_section_2.id
 


Koliko komplikovano to može biti?


Dao sam samo example da kada je prazan term da bi trebalo da vrati sve, posto se radi o search-u na site=u nece term uvek biti prazan.
[ djoka_l @ 09.10.2012. 14:12 ] @
Kada je prazan search term, tada nemoj da ubaciš where uslov, kada nije ubaci where uslov...
[ peca89bg @ 09.10.2012. 14:16 ] @
Ok za to, ali kada searchterm nije prazan ne vraca mi redove gde je naziv ''
[ bogdan.kecman @ 10.10.2012. 07:24 ] @
Citat:
peca89bg:
DB dump je u prilogu.



gde je data ? to je samo struktura ... aj lepo zakaci i datu sa kojom to ne radi posto ceo ovaj thread prestaje da ima smisla
[ peca89bg @ 10.10.2012. 10:08 ] @
Ok, evo dump-a. Neke sam rows sklonio sa email adresama i sl. Otkud znam :)
[ bogdan.kecman @ 10.10.2012. 10:44 ] @
cool, i kada pustis ovaj upit:

Code:

SELECT
    main_section.naziv_fr,
    sub_section_1.naziv_fr,
    sub_section_2.naziv_fr
        FROM
            main_section JOIN sub_section_1 ON main_section.id= sub_section_1.id_main
            JOIN sub_section_2 ON sub_section_2.id_sub_1 = sub_section_1.id
            JOIN sub_section_3 ON sub_section_3.id_sub_2 = sub_section_2.id 


sta ti fali od slogova u rezultatu
[ peca89bg @ 10.10.2012. 10:49 ] @
Nigde mi ne uhvati red gde je rich = 1 iz tabele sub_section_2.
Bitan mi je taj podatak jer ako je 1 onda ispisujem rich_des_en ili rich_des_fr.
treba mi sa where jer pretraga na site-u pa nece da bude uvek emptu term.
[ bogdan.kecman @ 10.10.2012. 10:54 ] @
nebitan je where za pocetak ...

kazes da ti se ovih 7 ne pokazuje ?

mysql> select count(*) from sub_section_2 where rich=1;
+----------+
| count(*) |
+----------+
| 7 |
+----------+
1 row in set (0.00 sec)

[ peca89bg @ 10.10.2012. 10:57 ] @
bas tako, nema nigde rich = 1 sve same nule :S
[ bogdan.kecman @ 10.10.2012. 11:03 ] @
stavi zadnji join da bude LEFT


...
LEFT JOIN sub_section_3 ON sub_section_3.id_sub_2 = sub_section_2.id
WHERE
...

i resices problem .. imas problem sto radis jon za sub_section_3.id_sub_2 = sub_section_2.id a

Code:

mysql> select id from sub_section_2;
+----+
| id |
+----+
| 11 |
| 35 |
| 33 |
| 42 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 25 |
| 26 |
| 27 |
| 32 |
| 36 |
| 37 |
| 38 |
| 39 |
| 40 |
| 41 |
| 49 |
| 50 |
| 54 |
| 43 |
+----+
29 rows in set (0.00 sec)

mysql> select id_sub_2 from sub_section_3;
+----------+
| id_sub_2 |
+----------+
|       12 |
|       13 |
|       14 |
|       15 |
|       16 |
|       17 |
|       18 |
|       19 |
|       20 |
|       21 |
|       22 |
|       25 |
|       26 |
|       27 |
|       36 |
|       37 |
|       38 |
|       39 |
|       40 |
|       41 |
|       50 |
+----------+
21 rows in set (0.00 sec)



dakle poklapa se samo 21:

Code:

mysql> select sub_section_3.id_sub_2, sub_section_2.id from sub_section_3, sub_section_2 where sub_section_3.id_sub_2 = sub_section_2.id;
+----------+----+
| id_sub_2 | id |
+----------+----+
|       12 | 12 |
|       13 | 13 |
|       14 | 14 |
|       15 | 15 |
|       16 | 16 |
|       17 | 17 |
|       18 | 18 |
|       19 | 19 |
|       20 | 20 |
|       21 | 21 |
|       22 | 22 |
|       25 | 25 |
|       26 | 26 |
|       27 | 27 |
|       36 | 36 |
|       37 | 37 |
|       38 | 38 |
|       39 | 39 |
|       40 | 40 |
|       41 | 41 |
|       50 | 50 |
+----------+----+
21 rows in set (0.00 sec)


i to je ono sto ti taj join vrati, ako hoces da imas i tamo gde nemas par, onda moras da radis left

Code:

mysql> select sub_section_2.rich from main_section JOIN sub_section_1 ON main_section.id= sub_section_1.id_main
    ->  JOIN sub_section_2 ON sub_section_2.id_sub_1 = sub_section_1.id
    ->  left JOIN sub_section_3 ON sub_section_3.id_sub_2 = sub_section_2.id;
+------+
| rich |
+------+
|    1 |
|    1 |
|    1 |
|    1 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    1 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    0 |
|    1 |
|    0 |
|    0 |
|    1 |
+------+
29 rows in set (0.00 sec)

mysql> 


ok?
[ bogdan.kecman @ 10.10.2012. 11:05 ] @
btw nisam gledao dalje, mozda jos neki od joinova mora da bude left .. zavisno od toga kakvi su podaci i sta oces ..
[ peca89bg @ 10.10.2012. 11:23 ] @
To je to, kako li sam smetnuo to sa uma, da me bije covek samo :) :)

Hvala puno!
[ bogdan.kecman @ 10.10.2012. 11:30 ] @
left, right, outer ... ima toga ... treba savladati :D...

ako neko zna za neki dobar tutorijal za jonove sa dobrim primerima neka okaci... ja mislim da me bar jednom nedeljno neko pita za dobar tutorial za join i ja uvek ljude saljem na mysql dokumentaciju ali onaj tamo tutorijal je prilicno bedan :(
[ peca89bg @ 10.10.2012. 11:43 ] @
Uvek imam left, outer, right u glavi ali jbg, blokada :)


Ja imam negde to po nekim sveskama boga samo boga pitaj gde je :)
Ako uspem da nadjem okacicu scan ovde, mada los mi rukopis :D
[ bogdan.kecman @ 10.10.2012. 11:47 ] @
ma pusti to iz sveski, mogu i ja da nacukam al nije to to ... sigurno ima negde na netu neki dobar manual sa slikama i slicno na koji mogu da se prosledjuju pocetnici ..