PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Andmebaasi päring
Postitaja: joker 2013-04-19 22:49:30
LocationID | CategoryID
--------------------------
2 | 3
2 | 5
1 | 5

Vaja teha päring ... leida LocationID-d mis omavad CategoryID väärtust 3 ja 5.

Variandid, mis ise mõtelnud:
* Päring WHERE CategoryID = 3 OR CategoryID = 5
Kommentaar: ei sobi. Vaja, et mõlemasse kategooriasse kuuluks. Päring haarab kaasa ka LocationID väärtusega 1.

* Päring WHERE CategoryID = 3 AND CategoryID = 5
Kommentaar: samuti ei sobi. Välistab mõlemad ja päringu tulemuseks on 0 rida.

Viimati muudetud: 19-04-2013 22:54:15
Muutja: joker
Põhjus:

RE: Andmebaasi päring
Postitaja: blaa 2013-04-19 23:49:46
Pane loogika tesitpidi tööle. Ma oletan, et (LocationID, CategoryID) on unikaalne võti.

select LocationID, count(LocationID) as cnt from tabel WHERE CategoryID in (3,5) group by LocationID having cnt = 2
RE: Andmebaasi päring
Postitaja: joker 2013-04-21 01:09:49
Nagu ma aru saan, siis having piirab ridade arvu kuni 2ni. Sel juhul asi ei sobi - mul pole aimugi, mitmesse kategooriasse üks või teine LocationId saab kuuluma.

Täiendus ülesande juurde, mida mõtlen ...

Location tabel
--------------
ID | City
1 | Helsinki
2 | Tartu
3 | Tallinn

Category tabel
--------------
ID | Name
3 | Parkla
4 | Tasuta wifi
5 | Söögikoht

Kahe tabeli seose tabel ...

LocationID | CategoryID
--------------------------
2 | 3
2 | 5
1 | 5
1 | 3
2 | 4

Kui checkboxiga märgin ära parkla (CategoryID=3) ja Wifi (CategoryID=4), siis soovin leida linnad kus saab parkida, ning tarbida tasuta Wifit. Tulemuseks peaks eelpool andmete põhjal andma ainult Tartu. Andmete täiendamisel tuleb muidugi seoseid / linnu jooksvalt juurde ...

Viimati muudetud: 21-04-2013 01:25:05
Muutja: joker
Põhjus:

RE: Andmebaasi päring
Postitaja: ise php 2013-04-21 08:25:53
Mijks üldse tekitad kolm üherealist tabelit? Kas sellise lihtsa asja jaoks poleks parem kasutada mitmerealist

ID City wifi parkla söögikoht
------------------------------
1 Tallinn 1 1 0
2 Tartu 1 0 0
3 Helsinki 1 1 1

Siit oleks juba väga hea asju otsida kui eesmärk on kohtasid lisada eemaldada, siis küll mõtekas mitu tabelit
RE: Andmebaasi päring
Postitaja: joker 2013-04-21 11:34:36
ise php - kolme tabeliga variant on effektiivsem. Ma ei tea ju palju andmete sisestaja üldse kategooriaid juurde lisab ... võib-olla üks ... võib-olla kolmkümmend.

Viimati muudetud: 21-04-2013 11:35:54
Muutja: joker
Põhjus:

RE: Andmebaasi päring
Postitaja: Vaatleja 2013-04-21 15:56:20
TSITEERITUD:
Pane loogika tesitpidi tööle. Ma oletan, et (LocationID, CategoryID) on unikaalne võti.

select LocationID, count(LocationID) as cnt from tabel WHERE CategoryID in (3,5) group by LocationID having cnt = 2


See versioon töötab minu arust kenasti. Mis siin piirama hakkab?
having cnt on kontrolliks, kui kategooriaid tuleb juurde, siis suurendad seda 2-e.

Näide oleks siis selle põhjal kui kategooriaid oleks 30:

select lid, count(lid) as cnt from seos WHERE cid in (1,3,5,7,10,25,30) group by lid having cnt = 7
RE: Andmebaasi päring
Postitaja: joker 2013-04-21 21:15:05
Tänud Blaa, sa oled alati tasemel ;o)

Pean lihtsalt eelnevalt kokku arvutama, mitu kategooriat on kasutaja poolt valitud, ning HAVING väärtuseks panema.
RE: Andmebaasi päring
Postitaja: blaa 2013-04-21 23:21:23
TSITEERITUD:
Pean lihtsalt eelnevalt kokku arvutama, mitu kategooriat on kasutaja poolt valitud, ning HAVING väärtuseks panema.

eksole, ega see 2 kuskilt lambist ei tulnud sinna.
Aga ma kordan veel üle, (LocationID,CategoryID) peab moodustama unikaalse võtme, sest kui baasi satub identseid kirjeid, siis see päring ei tööta.

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.453830003738