Topic: Filtravimas SQL

Issivedu SQL informacija is lenteles taip:

Select Pavadinimai.Vietove,
  Pavadinimai.Pirmas,
  Pavadinimai.Antras,
  Pavadinimai.Trecias,
  Pavadinimai.Ketvirtas,
  Pavadinimai.ID
From Pavadinimai

Kaip padaryti, kad   kai gaunu atsakyma is lenteles "Pavadinimas" laukas "Trecias" (ten atsakymas gaunamas TAIP arba NE) tai kai gaunamas NE, kad jo visai nerodytu, o rodyti tik atsakymus su rezultatu Taip)?

Re: Filtravimas SQL

Tai vienas būdas pakeisti duomenis yra pačiame MySQL atlikti tikrinimą:

...
IF(`Pavadinimai`.`Trecias` = 'TAIP', 'TAIP', '') AS `Trecias`,
...

Arba su PHP:

...
if($row_from_mysql["Trecias"] == "TAIP"]){
  // rodom ir naudojam
}else{
  // nerodom ir nenaudojam, ir niekas nematys
}

3 (edited by rolka 2010-05-03 09:05:31)

Re: Filtravimas SQL

Dar vienas klausimas,
Kaip isfiltruoti  pavadinimus is vieno stulpelio, kurie turi varde pirma raide 'M' ir su nepakeistu pavadinimu priskirti naujam stulpeliui?

Re: Filtravimas SQL

Nelabai aišku ką pas tave reiškia "nepakeistu pavadinimu".

5 (edited by rolka 2010-05-04 08:09:14)

Re: Filtravimas SQL

Na sakykime kad stulpelyje yra daug pavadinimu  (As parodziau galini rezultata, koki noreciau gauti, siuo metu viskas yra suplakta i viena stulpeli PREKES, o man reikia atskirti jas):

Prekes                             Pieno gaminiai             Kefyro gaminiai                               
Pienas zviagzdute,  ->   Pienas zviagzdute
Pienas rugelis,    ->      Pienas rugelis
kefyras-mauglis
Pienas papartis,  ->      Pienas papartis
Kefyras-ajeras,                                               ->  Kefyras-ajeras
Grietine Baltutis,
Duona Rudoji
ir t.t ir

na jeigu pavadinimas prasideda zodziu Pienas, perkeliu prie stulpelio su pavadinimu Pieno gaminiai, o jeigu Kefyras, tai prie stulpelio Kefyro gaminiai...

Re: Filtravimas SQL

O kur tu naudosi tokią užklausą? Jeigu kažkur daugiau negu vieną kartą, tai geriau iš karto persidaryk duomenų schemą, kad bent jau veiktų puse velnio. Nes atrinkinėjant pagal pirmą raidę ir verčiant (pivot) lentą - gero greičio nelauk.

Re: Filtravimas SQL

na as noreciau nors pabandyti kaip tai atrodytu, o jeigu nebusiu patenkintas gautu rezultatu, tai kazka reikes galvoti toliau.

Re: Filtravimas SQL

Nu tai pasidaria paverstą lentelę, tokiu principu:

SELECT `id`,
  MAX(IF(UPPER(LEFT(`pavadinimas`, 1)) = "P", `pavadinimas`, 0)) AS "P",
  MAX(IF(UPPER(LEFT(`pavadinimas`, 1)) = "K", `pavadinimas`, 0)) AS "K",
  ...
FROM `lentele`
GROUP BY `id`

Re: Filtravimas SQL

Jiegu parasau taip:

If(Upper(Left(lentele.Pavadinimas, 4)) = "Vard", lentele.Pavadinimas,
  0) As "Kitas_pavadinimas",                                                                       

---  (Taip darau, nes noriu atrinkti pavadinimus prasidedancius Vard....

zodzio pradzia)  SQL filtruoja puikiai, taciau php neatvaizduoja sio Field 'Kitas_pavadinimas'


O jeigu tik isivedu viena pavadinima:

If(lentele.Pavadinimas = 'Vard', 'KOnkretus_pavadinimas', '') As KOnkretus_pavadinimas,

Veikiai puikiai ir SQL ir PHP

Re: Filtravimas SQL

Kažką tu čia mali.

šita sąlyga niekada nebus lygi TRUE:

Upper(Left(lentele.Pavadinimas, 4)) = "Vard"

UPPER() funkcija žinai ką daro?

Re: Filtravimas SQL

Minde, ar ne pats man patarei taip padaryti, kad galeciau atrinkti pavadinimus prasidedancius norimomis raidemis..?

12

Re: Filtravimas SQL

šioje situacijoje ponas autorius nesivargino pasigilinti, kas yra UPPER, o tiesiog copy paste Mindės pvz ir rėkt,  "kodėl neveikia... :(" čiudikas

Kiek maigyklių sudėvėjai ?

Re: Filtravimas SQL

rolka wrote:

Minde, ar ne pats man patarei taip padaryti, kad galeciau atrinkti pavadinimus prasidedancius norimomis raidemis..?

Ten kur aš patariau, tai viskas ir lyginama teisingai - su didžiosiom raidėm - todėl viskas teisinga. Tas UPPDER() gal ir nereikalingas, bet čia jau aš pateikiau universalesnį variantą, nes neaišku kokie pas tave duomenys.

Re: Filtravimas SQL

md5 wrote:

šioje situacijoje ponas autorius nesivargino pasigilinti, kas yra UPPER, o tiesiog copy paste Mindės pvz ir rėkt,  "kodėl neveikia... :(" čiudikas

Pripazystu kad man dar labai daug reikia ismokti, taciau Jusu replikos cia visai ne vietoje

15 (edited by rolka 2010-05-07 10:55:28)

Re: Filtravimas SQL

minde wrote:
rolka wrote:

Minde, ar ne pats man patarei taip padaryti, kad galeciau atrinkti pavadinimus prasidedancius norimomis raidemis..?

Ten kur aš patariau, tai viskas ir lyginama teisingai - su didžiosiom raidėm - todėl viskas teisinga. Tas UPPDER() gal ir nereikalingas, bet čia jau aš pateikiau universalesnį variantą, nes neaišku kokie pas tave duomenys.

Situacija tokia:

Select lentele.Vardas,
  vardai.nuorodos,
  vardai.kitas,
  MAX(LEFT(lentele.Vardas, 1) = "A", lentele.Vardas, 0) As "Pavadinimai_su_Araide",
  If(lentele.Vardas = 'Konkretus_pavadinimas', 'Konkretus_pavadinimas', '') As Konkretus_pavadinimas,
  vardai.ID
From lentele
Group By lentele.Vardas

Komanda "MAX" RODO KAD KLAIDA, veikia tik parasius : If(Left(lentele.Vardas, 1) = "A", lentele.Vardas, 0) As "Pavadinimai_su_Araide",
SQL matau kad yra sukurtas laukas ir atrinkti pavadinimai prasidedantys A raide ... lyg viskas liuks, SQL atrinko, dabar beliko atvaizduoti varotojui

Rezultate kaip varotojas per narsykle as matau tik lauka "Konkretus pavadinimas" o laukas su "Pavadinimas su A raide" kur turetu matytis visi pavadinimai atrinkti su A raide yra tuscias, kur galetu buti problema ir kodel kai parasau MAX, rodo kad sintakases klaida?

Aciu kad skiri laiko atsakymams

Re: Filtravimas SQL

Jei negaila, įkelk kur nors sql faila su savo lentele ir duomenims bei tai, kokio tikslaus rezultato tu nori.
Nes kiek dabar pagaunu, tai arba tavo struktūra labai netinkama tokiam darbui, arba nepagaunu ko tu konkrečiai noti :)

Re: Filtravimas SQL

Pavyzdi as buvau ikeles anksciau, pacio SQL failo negaliu ikelti, taciau jis identiskas siam:

ID     Prekes                         
                                                 
1       Pienas zviagzdute, 
2       Pienas rugelis,         
3       kefyras-mauglis
4       Pienas papartis,     
5       Kefyras-ajeras,                                               
6       Grietine Baltutis,
7       Duona Rudoji
8       ir t.t ir

Man reikia kad butu taip:

Prekes                             Pieno gaminiai             Kefyro gaminiai                               
Pienas zviagzdute,  ->   Pienas zviagzdute
Pienas rugelis,    ->       Pienas rugelis
kefyras-mauglis
Pienas papartis,  ->       Pienas papartis
Kefyras-ajeras,                                               ->  Kefyras-ajeras
Grietine Baltutis,
Duona Rudoji
ir t.t ir

Cia anksciau kur minde patare, viskas lyg vyksta gerai, SQL rodo rezultata toki koki as noriu gauti (SQL kodas atrodo taip):

Select lentele.Vardas,
  vardai.nuorodos,
  vardai.kitas,
  If(Left(lentele.Vardas, 1) = "A", lentele.Vardas, 0) As "Pavadinimai_su_Araide",
  If(lentele.Vardas = 'Konkretus_pavadinimas', 'Konkretus_pavadinimas', '') As Konkretus_pavadinimas,
  vardai.ID
From lentele
Group By lentele.Vardas

Taciau problema ta, kad kai informacija jau isvedama i narsykle, ten matau tik rezultata kur SQL parasyta: If(lentele.Vardas = 'Konkretus_pavadinimas', 'Konkretus_pavadinimas', '') As Konkretus_pavadinimas,

O ten kur yra: If(Left(lentele.Vardas, 1) = "A", lentele.Vardas, 0) As "Pavadinimai_su_Araide",   isvesta informacija i narsykle, laukeli rodo tscia be duomenu.

Kur gali buti problema?

18

Re: Filtravimas SQL

Pirmiausia reikia pasirinkti strategiją, kokias kabutes naudoti SQLe ' ar ", o testus atlikinėti per phpmyadmin, aišku, jeigu yra galimybė.
O tai ne geriau ponuli kurt atskirą lentelę kategorijom.?
O jeigu bus tarpas pvz prieš kefyrą.
Be to ar esi girdėjęs apie "database normalization" ?

Kiek maigyklių sudėvėjai ?

Re: Filtravimas SQL

rolka wrote:

Taciau problema ta, kad kai informacija jau isvedama i narsykle, ten matau tik rezultata kur SQL parasyta: If(lentele.Vardas = 'Konkretus_pavadinimas', 'Konkretus_pavadinimas', '') As Konkretus_pavadinimas,

O ten kur yra: If(Left(lentele.Vardas, 1) = "A", lentele.Vardas, 0) As "Pavadinimai_su_Araide",   isvesta informacija i narsykle, laukeli rodo tscia be duomenu.

Kur gali buti problema?

a) jeigu dar nepaskaitei, ką daro UPPER() funkcija, tai paskaityk, gali praversti;
b) šitam uždaviniui realiai spręsti, reikia, kad būtų papildomas stulpelis, kuriame būtų tik viena (pirma) raidė iš pavadinimų stulpelio;
c) mano pavyzdys su lentelės paverimu skiriasi nuo to ką tu realiai naudoji; Tas skirtumas yra esminis norint, kad viskas veiktų taip, kaip reikia;

Re: Filtravimas SQL

Dekoju , issisprende su patarimu:

b) šitam uždaviniui realiai spręsti, reikia, kad būtų papildomas stulpelis, kuriame būtų tik viena (pirma) raidė iš pavadinimų stulpelio;