Jump to content
php.lv forumi

Kāds ir pareizs vaicājums?


Dooling

Recommended Posts

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

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

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

×
×
  • Create New...