Jump to content
php.lv forumi

Recommended Posts

Posted

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?

Posted

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.

Posted (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 by Dooling
Posted

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.

Posted

Vai IN() nederes? Ja grib salidzinat ar vairakam vertibam.

Posted (edited)

Bet loģiski spriežot iekavām vajag, tad kāpēc neatgriež vērtību, kur es kļūdos ;( .

Edited by Dooling
Posted

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)

Posted

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!

Posted
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

Posted
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

Posted

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?

Posted

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.

Posted

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

×
×
  • Create New...