Precīzs jautājums


Vai Tu proti uzdot precīzu jautājumu? Tādu, kuram potenciālajam atbildētājam nav jāuzdod vēl 5 precizējoši papildus jautājumi un jāizdara 7 pieņēmumi?

Ja tā, tad apsveicu! Jo esi diezgan rets putns. Diemžēl lielākā daļa cilvēku nespēj formulēt un uzdot precīzu jautājumu, tādu, kuru apskatoties, vari nešaubīgi izdomāt un sniegt atbildi. Lielākajā daļā gadījumu informācija ir vienkārši nepietiekama, pie tam reizēm tā ir jāvelk ārā kā ar stangām, reizēm to ir iespējams noprast, jo esi saskāries ar līdzīgu situāciju, reizēm apzināti vai neapzināti atbildētājs izprovocē situāciju kā šai anekdotē:

Vīrs ar sievu izdomāja vienā sava dzīvokļa istabā pārlīmēt tapetes. Sieva saka vīram:
– Noej lejā pie kaimiņiem, viņi nesen remontu taisīja. Viņiem ir tieši tāds pats dzīvoklis, uzzini, cik tapešu ruļļus viņi nopirka.
Vīrs noiet pie kaimiņiem un uzzina, ka kaimiņi pirms remonta nopirkuši sešpadsmit ruļļus.
Sieva ar vīru izlīmēja tapetes un secināja, ka pieci ruļļi palikuši pāri.
Vīrs noiet pie kaimiņiem:
– Es nekādi nevaru saprast – vienādi dzīvokļi, bet mums pieci ruļļi palika pāri. Kā gan tas var būt?
Kaimiņš, rāmi smaidot, saka:
– Tu nepārdzīvo, viss ir kārtībā, mums arī pieci ruļļi palika pāri.

Tātad, ko nozīmē precīzs jautājums?

Precīzs jautājums ir tāds, uz kuru var atbildēt cilvēks, kas:

  1. neko nezin par tavu jau nedēļu risināmo un prātus pārņēmušo problēmu
  2. bet tai pašā laikā pārzina problēmas sfēru un spēj atbildēt uz jautājumu, ja ir zināma problēmas nostādne un panākamā situācija.

Nesākšu gari teoretizēt un dot smalkus skaidrojumus, bet lūk ir piemērs,manuprāt, precīzam jautājumam.

Nespēju uzrakstīt vaicājumu MySQL versijā 5.0. Vai kāds nevarētu palīdzēt? Tabulas definīcija:

CREATE TABLE nested_category (
 category_id INT AUTO_INCREMENT PRIMARY KEY,
 name VARCHAR(20) NOT NULL,
 lft INT NOT NULL,
 rgt INT NOT NULL
);

Tabulas dati:

INSERT INTO nested_category
VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);

Šobrīd māku iegūt datus šādi (kategorijas piekārtojas apakškategorijām pēc pievienošanas identifikatora):

mysql> SELECT node.category_id id,
    ->   CONCAT( REPEAT(' ', COUNT(parent.name) - 1), node.name) AS name
    -> FROM nested_category AS node,
    -> nested_category AS parent
    -> WHERE node.lft BETWEEN parent.lft AND parent.rgt
    -> GROUP BY node.name
    -> ORDER BY node.lft;
+----+-----------------------+
| id | name                  |
+----+-----------------------+
|  1 | ELECTRONICS           |
|  2 |  TELEVISIONS          |
|  3 |   TUBE                |
|  4 |   LCD                 |
|  5 |   PLASMA              |
|  6 |  PORTABLE ELECTRONICS |
|  7 |   MP3 PLAYERS         |
|  8 |    FLASH              |
|  9 |   CD PLAYERS          |
| 10 |   2 WAY RADIOS        |
+----+-----------------------+
10 rows in set (0.00 sec)

Bet nepieciešams, lai apakškategorijas katras virskategorijas ietvaros tiktu kārtotas alfabētiski, tas ir, augšminētajiem datiem šādi:

+----+-----------------------+
| id | name                  |
+----+-----------------------+
|  1 | ELECTRONICS           |
|  6 |  PORTABLE ELECTRONICS |
| 10 |   2 WAY RADIOS        |
|  9 |   CD PLAYERS          |
|  7 |   MP3 PLAYERS         |
|  8 |    FLASH              |
|  2 |  TELEVISIONS          |
|  4 |   LCD                 |
|  5 |   PLASMA              |
|  3 |   TUBE                |
+----+-----------------------+

Kā to panākt?

Tātad šeit ir:

  • dota izejas situācija, vides apraksts un atbildētājam nav jānodarbojas ar skatīšanos kristāla bumbā, minējumiem izmantojot iepriekšējo pieredzi par vidējo statistisko jautātāju, Latvijas īpašo situāciju un mēness fāžu ietekmi uz jautājuma uzdevēju;
  • skaidra situācija, ko ir iespējams panākt un veids, kā to izdarīt;
  • skaidra situācija, kas ir jāpanāk, bet kurai tās sasniegšanas veids nav zināms;
  • jā, pareizi sapratāt – jautātājam ir jāiespringst un jāizdara zināms darbs, lai jautājumu precīzi noformulētu.

Es jau reiz rakstīju par šo tēmu kā uzdot saprātīgu jautājumu. Jā un, protams, ka šo rakstu izprovocēja konkrēts jautājums (tajā arī meklējama atbilde), pareizāk izsakoties šis jautājums uzlika punktu uz i, jau sen briedušai vēlmei 🙂

3 Responses to Precīzs jautājums

  1. Jānis saka:

    Šodien pusdienās pēc pasūtījuma “pusīti franču karbonātdes itāļu gaumē, lūdzu” (nu vai kaut kā tamlīdzīgi) sekoja jautājums “un ko klāt?”.. dzert negribās, teicu ka neko.. Izrādījās, gribēja zināt par piedevām..

    Negribas vainot savas attapības trūkumu, tāpēc rodas aizdomas, ka viņa nav lasījusi šo rakstiņu..

  2. Jānis saka:

    Un ja tā problēma būtu iekš MS SQL un ja pareizi saprotu jautājumu (tā īpaši neiedziļinājos), tad es domātu “With Rollup” virzienā

    SELECT Kat_1, Kat_2, Kat_3
    FROM dbo.MyTable
    GROUP BY Kat_1, Kat_2, Kat_3
    WITH ROLLUP
    ORDER BY Kat_1, Kat_2, Kat_3

    rezultātā iegūst apmēram
    Null Null Null
    ‘kat_1’ Null Null
    ‘kat_1’ ‘Kat_2’ Null
    ‘kat_1’ ‘Kat_2’ ‘Kat_3’
    ‘kat_1’ ‘Kat_2’ ‘Kat_3’
    ‘kat_1’ ‘Kat_2’ Null

    Tālāk jau ar visādiem filtriņiem interfeisā var visu ko izdarīt.. (šo esmu izmantojis kad vajag hierarhiskus look-up’us)

  3. Gints Plivna saka:

    Jā BTW nav slikta ideja, bet šis vaicājums ir fiksētam skaitam līmeņu. Te sanāca, ka vajag iepriekš nezināmam skaitam. Un pie tam MySQLā nav principā rekursīvu vaicājumu, tāpēc nākas izlīdzēties ar speciālām struktūrām, kurās var modelēt hierarhiju neizmantojot pliku parent->child relāciju.

Komentēt