Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Provera različitih uslova za iste vrednosti polja, za više redova.

  • 6 odgovora
  • 2.914 pregleda

Najnovija ↓

Provera različitih uslova za iste vrednosti polja, za više redova. 09.01.2006. u 00:19 · pre 253 meseca #1
Naziv teme je verujem vrlo loš, ali neka moderator izmeni jer ja stvarno nisam uspeo da smislim nešto normalno :)

Treba mi 'algoritam' za rešavanje sledećeg tipa problema:

Baza:
+-----+----------+
| sid | meets_at |
+-----+----------+
| 1 | 09:00:00 |
| 2 | 14:00:00 |
| 6 | 14:00:00 |
| 7 | 10:00:00 |
| 9 | 14:00:00 |
| 14 | 14:00:00 |
| 22 | 10:00:00 |
| 22 | 14:00:00 |
| 23 | 15:00:00 |
| 24 | 09:00:00 |
| 29 | 14:00:00 |
| 30 | 14:00:00 |
| 39 | 14:00:00 |
| 39 | 17:00:00 |
| 41 | 14:00:00 |
| 43 | 14:00:00 |
| 48 | 10:00:00 |
| 52 | 15:00:00 |
+-----+----------+

Kao što se da primetiti, sid nije unikatan. Ono što treba da izvučem jesu svi sid-ovi koji u odgovarajućim meets_at poljima imaju makar jednom vrednost veću od 12:00:00 i makar jednom vrednost manju od 12:00:00. U ovom konkretnom slučaju, traženi rezultat je samo sid 22 (sid 39 u oba reda u meets_at polju ima vrednosti veće od 12:00:00, dok sid 22 ima jednom veću, a jednom manju vrednost, što je i traženo).

Ja sam ovo uspeo da rešim tako što sam napravio jednu tabelu sa svim redovima u kojima je meets_at manje od 12:00:00 i jos jednu gde je meets_at veće od 12:00:00, pa sam zatim ukombinovao te dve tabele, odnosno izvukao sid koji se pominje u obe.
Ipak, ne mogu da se otmem utisku da to može mnogo elegantnije i praktičnije da se reši (već u narednim problemima istog tipa sa kojima se srećem ovaj algoritam postaje vrlo nezgodan za implementaciju)?

OS: Windows XP
Server version: 5.0.18-nt
Protocol version: 10
Potpis
ex.mangel
Re: Provera različitih uslova za iste vrednosti polja, za više redova. 09.01.2006. u 10:23 · pre 253 meseca #2
Code:

SELECT sid
FROM tabela
WHERE sid IN
     (
     SELECT sid
     FROM tabela
     WHERE meets_at > '12:00:00'
     )
AND sid IN
     (
     SELECT sid
     FROM tabela
     WHERE meets_at < '12:00:00'
     )
ORDER BY sid;
Napisano iz glave; provjeri da li radi...
Potpis
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
Re: Provera različitih uslova za iste vrednosti polja, za više redova. 11.01.2006. u 11:36 · pre 253 meseca #5
Ok, sa ovim prethodnim sam se snašao. Ali evo sad situacije gde umesto dva uslova (pre 12h i posle 12h) ima praktično n uslova:
mysql> SELECT * FROM rooms;
+------------+
| room |
+------------+
| Large Hall |
| A5 |
| Small Hall |
+------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM combs;
+------------+------------+
| insname | room |
+------------+------------+
| Williamson | Large Hall |
| Weasley | Small Hall |
| Weasley | A5 |
| Weasley | Large Hall |
| Potter | A5 |
| Johnson | Small Hall |
| Johnson | A5 |
| Daniels | A5 |
| Daniels | Small Hall |
| Daniels | Large Hall |
| Wilson | Large Hall |
| Wilson | A5 |
| Smith | Large Hall |
| Wesson | A5 |
+------------+------------+
14 rows in set (0.00 sec)

Sad treba da izvučem imena (insname) iz combs, koja su vezana za sve sobe (room) iz rooms (traženi rezultat u ovom slučaju je Weasley i Daniels). U ovom slučaju ima tri sobe, i ja bih to mogao da rešim na već opisani način, ali šta ako soba ima mnogo? Bilo bi vrlo nepraktično praviti takav kveri za recimo 30 soba.

Pokušao sam to da odradim tako što poredim broj redova u rooms i broj pojavljivanja svakog imena u combs, ali izgleda da to nisam odradio kako treba:
mysql> SELECT insname FROM combs,rooms GROUP BY insname HAVING COUNT(insname)=COUNT(rooms.room);
+------------+
| insname |
+------------+
| Daniels |
| Johnson |
| Potter |
| Smith |
| Weasley |
| Wesson |
| Williamson |
| Wilson |
+------------+
8 rows in set (0.00 sec)

Ovo mi se čini kao najbolje rešenje, samo što ga nisam implementirao kako treba. Mučim se sa ovim već neko vreme, pa bi bilo lepo ako bi neko mogao da mi pomogne?
Potpis
ex.mangel
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme