praegune kellaaeg 21.06.2025 22:23:18
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
raido357
HV veteran
liitunud: 26.09.2002
|
29.04.2009 17:12:35
Abi Mysql'i SELECT'iga. |
|
|
Tere!
On olemas selline tabel.
Spoiler 
select * from kursus_oppejoud ORDER BY kursuse_id;
+----+---------+------------+
| id | aine_id | kursuse_id |
+----+---------+------------+
| 11 | 7 | 1 |
| 12 | 4 | 1 |
| 13 | 5 | 1 |
| 10 | 7 | 2 |
| 14 | 5 | 2 |
| 9 | 7 | 3 |
+----+---------+------------+
Tegu on ühe tunniplaani süsteemi osaga, selle tabeli ees märk on aine siduda kursusega/rühmadega ja osa aineid saab olema ka mitmel kursusel.
On vaja siis teha selline SELECT , et Ajaxiga saabub vormilt valitud kursuse(te) Id'd näiteks "1,2" (kursus 1 ja kursus 2) ning vaja siis küsida, et kus kursuse_id on 1 ja 2, siis anna nende kahe kursuse ühised ained. Hetkel olen proovinud nii, et "kursuse_id IN (1,2)" aga sellega ei tehta siiski vahet, kas saadud ainete_Id'd on ühised. Ei tohi tekkida olukorda, kus kursus 1'ga on seotud aine 1 ja kursus 2 aine 2, ning siis mõlemad selekteerides vormil antakse välja nii aine 1, 2, vaid peaks andma tühjuse, et sellistel kursuselt ühised ained puuduvad.
Näiteks "kursuse_id IN (1,2,3)" annak "aine_id = 7", sest 1,2,3 kõik omavad ainet id'ga 7. IN(1,3) peaks andma ainult 7, sest 3el pole aine_id'd 4.
Keeruline tekst aga küsige kui aru ei saa.
(Tabeli nime ärge pange tähele, see on vale hetkel).
Tänud!
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
Valdars
HV veteran

liitunud: 22.02.2003
|
29.04.2009 17:19:56
|
|
|
SELECT * FROM kursus_oppejoud WHERE aine_id IN (SELECT DISTINCT aine_id FROM kursus_oppejoud WHERE kursus_id IN (kursuse ID-ed)); |
|
|
Kommentaarid: 47 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
44 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
29.04.2009 17:31:37
|
|
|
Valdars kirjutas: |
SELECT * FROM kursus_oppejoud WHERE aine_id IN (SELECT DISTINCT aine_id FROM kursus_oppejoud WHERE kursus_id IN (kursuse ID-ed)); |
|
SELECT * FROM kursus_oppejoud WHERE aine_id IN (SELECT DISTINCT aine_id FROM kursus_oppejoud WHERE kursuse_id IN (1,2));
+----+---------+------------+
| id | aine_id | kursuse_id |
+----+---------+------------+
| 9 | 7 | 3 |
| 10 | 7 | 2 |
| 11 | 7 | 1 |
| 12 | 4 | 1 |
| 13 | 5 | 1 |
| 14 | 5 | 2 |
+----+---------+------------+
Tulemus pole ikka päris õige, "kursuse_id = 3" aineid ei tohiks kuvatud olla, Ainetest peaks olem kuvatud ainult 5 ja 7. Midagi sellist ->
| id | aine_id | kursuse_id |
+----+---------+------------+
| 10 | 7 | 2 |
| 11 | 7 | 1 |
| 13 | 5 | 1 |
| 14 | 5 | 2 |
+----+---------+------------+
Tulemus pole ikka päris see mida vaja
Edit:
SELECT * FROM kursus_oppejoud WHERE kursuse_id IN (1,2) AND aine_id IN (SELECT DISTINCT aine_id FROM kursus_oppejoud WHERE kursuse_id IN (1,2));
Sellega sai 7 | 3 reast lahti aga
| 12 | 4 | 1 |
veel alles.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
tanzanite
HV kasutaja

liitunud: 13.05.2006
|
29.04.2009 19:20:13
|
|
|
SELECT * FROM tbl r WHERE r.kursuse_id IN (1,2) AND EXISTS (SELECT * FROM tbl a WHERE a.kursuse_id=1 AND a.aine_id=r.aine_id) AND EXISTS (SELECT * FROM tbl b WHERE b.kursuse_id=2 AND b.aine_id=r.aine_id)
... perhaps?
|
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
29.04.2009 19:50:20
|
|
|
tanzanite kirjutas: |
SELECT * FROM tbl r WHERE r.kursuse_id IN (1,2) AND EXISTS (SELECT * FROM tbl a WHERE a.kursuse_id=1 AND a.aine_id=r.aine_id) AND EXISTS (SELECT * FROM tbl b WHERE b.kursuse_id=2 AND b.aine_id=r.aine_id)
... perhaps? |
Tundub, et annab soovitud tulemusi, nüüd pean PHP'e poolele vajaliku funktsiooni tekitama, et vastavate väärtustega SELECT oleks.
Mis tundub, siiski veits keeruline, 1-2 rühmaga pole ullu aga näiteks oletame, et 5 või enamal rühmal on ühine aine.
Eks peab tekitama, mitme AND EXISTS'iga lause, mingise tsükli abil.
Edit: Väga hea, PHP loob SELECT lauset ja kõik toimib ideaalselt.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
scrag
HV kasutaja
liitunud: 08.12.2003
|
29.04.2009 20:55:05
|
|
|
Jäin vist küll hiljaks, aga huvi pärast võid katsetada, kas selline päring ka toimiks
SELECT t1.aine_id
FROM kursus_oppejoud t1, kursus_oppejoud t2
WHERE t1.kursuse_id IN (1, 2) AND t2.kursuse_id IN (1, 2) AND t1.aine_id = t2.aine_id AND t1.kursuse_id != t2.kursuse_id |
|
|
Kommentaarid: 9 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
9 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
29.04.2009 20:59:57
|
|
|
scrag kirjutas: |
Jäin vist küll hiljaks, aga huvi pärast võid katsetada, kas selline päring ka toimiks
SELECT t1.aine_id
FROM kursus_oppejoud t1, kursus_oppejoud t2
WHERE t1.kursuse_id IN (1, 2) AND t2.kursuse_id IN (1, 2) AND t1.aine_id = t2.aine_id AND t1.kursuse_id != t2.kursuse_id |
|
See toimib ainult siis, kui on valitud kaks kursust, nagu sinu toodud lahenduses "1,2" , kui aga valitakse ainult 1 kursus, siis t1.kursus != t2.kursuse_id võrdus enam ei anna false' ja tulemus on tühi. Ei ole kas teistel viisidelgi toimib.
Praegu pool rakenduse osast valmis saanud, eelmine lahendus aitas kännust üle.
Tänud abistajatele.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
01.05.2009 01:03:42
|
|
|
ma pakuks omalt poolt ka veidi elegantsema lahenduse ka välja:
SELECT aine_id, COUNT(aine_id) FROM kursus_oppejoud WHERE kursuse_id IN (kursuste_id'd) GROUP BY aine_id HAVING COUNT(aine_id) = kursuste_id'de arv |
Näiteks kursuste 1 ja 2 korral:
SELECT aine_id, COUNT(aine_id) FROM kursus_oppejoud WHERE kursuse_id IN (1,2) GROUP BY aine_id HAVING COUNT(aine_id) = 2 |
ja kursuste 1, 2 ja 3 korral
SELECT aine_id, COUNT(aine_id) FROM kursus_oppejoud WHERE kursuse_id IN (1,2,3) GROUP BY aine_id HAVING COUNT(aine_id) = 3 |
Töötab ka 1 korral ja ei ole vaja phps tsükleid ega muud jama.
Kui on võimalus, et tabelis on mitu korda sama aine ja kursuse kombinatsiooni, siis peaks piisama, et lõpus "=" asemele ">=" panna.
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
02.05.2009 09:43:53
|
|
|
Kena, igati hea lahendus.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|