Dooling Posted May 30, 2007 Report Share Posted May 30, 2007 Ir šāds vaicājums: SELECT DISTINCT anketetajs FROM kd_dala WHERE ((lauka_mid = '49' and atbilde = '5') or (lauka_mid = '59' and atbilde = '5')) and ((lauka_mid = '51' and atbilde = '12.05.2007') or (lauka_mid = '89' and atbilde = '12.05.2007')) Man neatgriež nekādas vērtības. Ja vaicājumus nodala atsevišķi: SELECT DISTINCT anketetajs FROM kd_dala WHERE ((lauka_mid = '49' and atbilde = '5') or (lauka_mid = '59' and atbilde = '5')) atgriež sādas vērtības: 3 SELECT DISTINCT anketetajs FROM kd_dala WHERE ((lauka_mid = '51' and atbilde = '12.05.2007') or (lauka_mid = '89' and atbilde = '12.05.2007')) atgriež sādas vērtības: 3,5,10 Man vajag lai atgriež vērtību 3. Kur es kļūdos? Link to comment Share on other sites More sharing options...
andrisp Posted May 30, 2007 Report Share Posted May 30, 2007 Protams, ka tev pirmais selekts nestrādās. Tu mēģini izvilkt rindas, kurās lauka_mid vērtība vienlaicīgi varētu būt 49 vai 59 un 51 vai 89. Tāpat arī ar atbilde laukiem. Link to comment Share on other sites More sharing options...
Dooling Posted May 30, 2007 Author Report Share Posted May 30, 2007 (edited) andrisp, Tu domāji šādu vaicājumu: SELECT DISTINCT anketetajs FROM kd_dala WHERE ( lauka_mid = '49' OR lauka_mid = '59' AND lauka_mid = '51' OR lauka_mid = '89' ) AND ( atbilde = '5' OR atbilde = '5' AND atbilde = '12.05.2007' OR atbilde = '12.05.2007') šāds vaicājums man atgriež vērtību 3. Bet tad jautājums vai citā gadījumā atgriezīs man pareizas vērtības, ja nav iekavu, piem. SELECT DISTINCT anketetajs FROM kd_dala WHERE ( (lauka_mid = '49' OR lauka_mid = '59') AND (lauka_mid = '51' OR lauka_mid = '89' )) AND (( atbilde = '5' OR atbilde = '5') AND (atbilde = '12.05.2007' OR atbilde = '12.05.2007')) Ja ir šāds vaicājums, tad gan neko neatgriež Edited May 30, 2007 by Dooling Link to comment Share on other sites More sharing options...
andrisp Posted May 30, 2007 Report Share Posted May 30, 2007 Es nedomāju nekādu vaicājumu. Es tikai pateicu, kāpēc tev pirmais kverijs nestrādā. Nemācēšu pateikt kā tev jādara, jo nesaprotu, ko tu gribi panākt. Link to comment Share on other sites More sharing options...
cucumber Posted May 30, 2007 Report Share Posted May 30, 2007 Vai IN() nederes? Ja grib salidzinat ar vairakam vertibam. Link to comment Share on other sites More sharing options...
Dooling Posted May 30, 2007 Author Report Share Posted May 30, 2007 (edited) Bet loģiski spriežot iekavām vajag, tad kāpēc neatgriež vērtību, kur es kļūdos ;( . Edited May 30, 2007 by Dooling Link to comment Share on other sites More sharing options...
Dooling Posted May 30, 2007 Author Report Share Posted May 30, 2007 Ar IN() ? Neesmu nekad ar IN vēl vaicājumus veidojis? Vai varētu kādu piemēru? Link to comment Share on other sites More sharing options...
larvae Posted May 30, 2007 Report Share Posted May 30, 2007 Ja Tev lauks 'atbilde' ir DATE tipa, tad vajag izmantot STR_TO_DATE(noraadiitais_datums, formaats_kaadaa_ir_datubaazee_datums). Par IN: WHERE a = 1 OR a = 2 OR a = 3 ir tas pats, kas WHERE a IN (1,2,3) Link to comment Share on other sites More sharing options...
andrisp Posted May 30, 2007 Report Share Posted May 30, 2007 SELECT * FROM table WHERE id IN (1,2,3,4,5) Bet loģiski spriežot iekavām vajag, tad kāpēc neatgriež vērtību, kur es kļūdos ;( . Ko iekavām vajag? Tak mīļie cilvēki - iemācieties izteikties tā, lai jums var palīdzēt! Link to comment Share on other sites More sharing options...
andrisp Posted May 30, 2007 Report Share Posted May 30, 2007 Ja Tev lauks 'atbilde' ir DATE tipa, tad vajag izmantot STR_TO_DATE(noraadiitais_datums, formaats_kaadaa_ir_datubaazee_datums). Kāpēc ? Tīri labi var iztikt ar vienkāršiem datums = '2007-01-01' u.t.t Link to comment Share on other sites More sharing options...
Dooling Posted May 30, 2007 Author Report Share Posted May 30, 2007 Ko iekavām vajag? Tak mīļie cilvēki - iemācieties izteikties tā, lai jums var palīdzēt! Ja ir OR un AND, tad vajag taču nodalīt tos ar iekavām, lai atgriež pareizās vērtības. Piemēram: SELECT DISTINCT anketetajs FROM kd_dala WHERE ( (lauka_mid = '49' OR lauka_mid = '59') AND (lauka_mid = '51' OR lauka_mid = '89' )) AND (( atbilde = '5' OR atbilde = '5') AND (atbilde = '12.05.2007' OR atbilde = '12.05.2007')) Pareizi tak ir nodalīts ar iekavām. Runajot par IN() iespēju, tagad es skatos vai derēs man tas Link to comment Share on other sites More sharing options...
andrisp Posted May 30, 2007 Report Share Posted May 30, 2007 Nu jā - vajag nodalīt. Bet tev tam selektam ir nepareiza loģika. Link to comment Share on other sites More sharing options...
Dooling Posted May 30, 2007 Author Report Share Posted May 30, 2007 Un kāda, tavuprāt, būtu pareiza loģika. Izstāstīšu lietas būtību. Ir lauki, kur lietotājs ievadot meklējamo informāciju un izvēloties nepieciešamo operatoru (=, !=, >, >= utt.) filtrē datus. Ievadītā lauka meklējamo informāciju meklē vairāko datubāzes ierakstos vai tie sakrīt vai nē? Piemēram: 1) Pirmais lauks: Datums(lauks, kuru ievada lietotājs): 12.05.2007 . Es pirms tam izflitrēju, kuros tabulas ID(lauka_mid) meklēt to informāciju , piemēram, 49, 59. Un tad tajos laukos meklē konkrētu lauku, kas šajā gadījumā ir anketetajs, ja protams ir. 2) Otrais lauks: Vērtējums(lauks, kuru ievada lietotājs): 5 . Arī pirms tam izflitrēju, kuros tabulas ID(lauka_mid) meklēt to informāciju , piemēram, 51, 89. Un tad tajos laukos meklē konkrētu lauku, kas šajā gadījumā ir anketetajs, ja protams ir. 3) utt. skatoties cik lietotājs ir norādījis laukus Vai skaidra ideja? Link to comment Share on other sites More sharing options...
bubu Posted May 30, 2007 Report Share Posted May 30, 2007 Tā vērtība 3 gadījumā nenāk katrā atsevišķajā selektā no citas rindas? Jo tad jau ir pareizi, ka pirmais lielais selekts nenostrādā. Skaties pats (andrisp jau to teica, atkārtošos): SELECT DISTINCT anketetajs FROM kd_dala WHERE ((lauka_mid = '49' and atbilde = '5') or (lauka_mid = '59' and atbilde = '5')) and ((lauka_mid = '51' and atbilde = '12.05.2007') or (lauka_mid = '89' and atbilde = '12.05.2007')) Šādu vaicājumu var apmierināt tikai vienīgi tāda rinda, kurā (lauka_mid=49 or lauka_mid=59) and (lauka_mid=51 or lauka_mid=89). Tātad, atverot iekavas: (lauka_mid=49 and lauka_mid=51) or (lauka_mid=49 or lauka_mid=89) or (lauka_mid=59 and lauka_mid=51) or (lauka_mid=59 and lauka_mid=89). Skaidri redzams, ka šīs izteiksmes vērtība VIENMĒR ir FALSE. Link to comment Share on other sites More sharing options...
Dooling Posted May 30, 2007 Author Report Share Posted May 30, 2007 Nu jā tā vērtība nāk katrā atsevišķā selektā. Hmm ... tagad esmu apmulsis. Nav ideju kā, lai panāk vēlamo rezultātu Link to comment Share on other sites More sharing options...
Recommended Posts