login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Moeilijke Querie

Offline HOND_NL - 10/10/2008 11:14
Avatar van HOND_NLNieuw lid Hoi web architecten ,

Ik zit al een dag met een hele irritante query , het zou ideaal zijn als deze goed zou werken.

Ten eerste De tabellen.
Tabel : tvseeker > Deze tabel slaat tv series gegevens op
Tabel : tv_infoseeker -> Deze tabel slaat info over de serie op mits deze aanwezig is.

TABEL TVSEEKER :
id int(255)
n Naam
epi Episode (int)
season Season (int)
a Unix time
f Formaat > 1=xvid ,2=dvdrip,3=HD,4=DVD
cat Categorie -> 1= eerste keer gepost 2=repost

TABEL tv_infoseeker
Tekst
genres
IMages

Ok mijn probleem :

Er komen elk uur tig nieuwe serie releases in de tabel.
Voorbeeld :

Heroes seizoen 3 episode 4 , HD , 3 uur geleden
Maar kan ook deze zijn
Heroes seizoen 3 episode 1,XVID, 1 uur geleden.

Ik wil op een pagina het volgende :

Een lijst met :
- Unieke serie namen ( group by N).
- Alleen het nieuwe seizoen en de laatste(hoogste) episode.
- Gesorteed op laatst toegevoegd.


Ik heb een querie die werkt d.m.v. subqueries , maar die is veeels te sloom. ( 3,8 sec).
rel=tvseeker
info=tvseeker_info

  1. SELECT rel.n , rel.a , rel.season , rel.f ,rel.epi ,info.n, info.genres , info.tekst,info.image
  2. FROM tvseeker AS rel, tvseeker_info AS info
  3.  
  4. WHERE rel.n=info.n
  5.  
  6. AND rel.a=(SELECT max(a) FROM tvseeker WHERE n=rel.n )
  7.  
  8. AND rel.season=(SELECT max(season) FROM tvseeker WHERE n=rel.n )
  9.  
  10. AND b.epi=(SELECT max(epi) FROM tvseeker WHERE n=rel.n AND season=rel.season )
  11. AND b.cat='1' AND (b.f='1' OR b.f='3')
  12. GROUP BY rel.n ORDER BY rel.a DESC



Ik ben begonnen met deze querie (0,3030 sec), die ieder geval het nieuwste seizoen bevat ,maar dus ook episodes selecteert die niet het nieuwst zijn.

  1. SELECT rel.n, rel.a, rel.season, rel.f, rel.v, rel.epi, info.genres, info.tekst, info.image
  2. FROM tvseeker rel INNER JOIN (
  3.  
  4. SELECT rel_extra.n, max( rel_extra.a ) AS a, MAX( rel_extra.season ) AS season, info_extra.genres, info_extra.tekst, info_extra.image
  5. FROM tvseeker AS rel_extra
  6.  
  7. INNER JOIN (
  8.  
  9. SELECT genres, n, tekst, image
  10. FROM tvseeker_info)
  11.  
  12. AS info_extra ON rel_extra.n = info_extra.n
  13. GROUP BY info_extra.n
  14. )
  15.  
  16. AS info ON rel.n = info.n AND rel.a = info.a
  17. AND rel.season =info.season
  18. AND (rel.f = '1' OR rel.f = '3')
  19. GROUP BY rel.n
  20. ORDER BY rel.a DESC



Weet iemand hoe ik met de laatste querie toch - alleen- de laatste episode kan krijgen?
Good luck ;)

7 antwoorden

Gesponsorde links
Offline vinTage - 10/10/2008 11:25
Avatar van vinTage Nieuw lid Geen idee of ik je goed begrijp, maar LIMIT 1 erbij, dan heb je toch alleen het laatste resultaat?
Offline Martijn - 10/10/2008 11:46 (laatste wijziging 10/10/2008 11:50)
Avatar van Martijn Crew PHP volgens mij inner join je ook verkeerd.


  1. SELECT tabel1.kolom1, tabel1.kolom2, tabel2.kolom1,tabel3.kolom5
  2. FROM tabel1
  3. INNER JOIN tabel2 (tabel1.id=tabel2.id)
  4. INNER JOIN tabel2 (tabel1.id=table3.id)
  5. GROUP BY tabel2.kolom1,tabel5.kolom5
  6. ORDER BY tabel1.kolom1
  7. LIMIT 30


maar group by is niet mn sterkste kant
Offline HOND_NL - 10/10/2008 11:49 (laatste wijziging 10/10/2008 11:55)
Avatar van HOND_NL Nieuw lid
vinTage schreef:
Geen idee of ik je goed begrijp, maar LIMIT 1 erbij, dan heb je toch alleen het laatste resultaat?



Ik wil de laatste 30 hebben die het nieuwste seizoen en de laatste episode bevatten geordend op laatst toegevoegd


  1. 1.
  2. SELECT tabel1.kolom1, tabel1.kolom2, tabel2.kolom1,tabel3.kolom5
  3. 2.
  4. FROM tabel1
  5. 3.
  6. INNER JOIN tabel2 (tabel1.id=tabel2.id)
  7. 4.
  8. INNER JOIN tabel2 (tabel1.id=table3.id)
  9. 5.
  10. GROUP BY tabel2.kolom1,tabel5.kolom5
  11. 6.
  12. ORDER BY tabel1.kolom1
  13. 7.
  14. LIMIT 30


hmm volgens mij niet , ik moet namelijk 4( 2 virtueel) tabellen joinen , en dat kan alleen als je in de inner join nog een Inner join plaatst.


Offline vinTage - 10/10/2008 11:52
Avatar van vinTage Nieuw lid LIMIT 0, 30 dan 
Offline HOND_NL - 10/10/2008 12:02
Avatar van HOND_NL Nieuw lid Ter informatie en helderheid.

Dit is waar de querie op uitkomt :

[url]http://www.nzbtvseeker.com/[/url]

DUs :
de pagina moet bevatten :
Lijst met de laatst toegevoegd series die nieuw zijn.
( laatste seizoen + laatste episode) + waar info voor is.

Als er dus een episode in de tabel komt die lager is dan de hoogste episode , moet hij die niet selecteren , zelfs als deze qua tijd wel nieuwer is.


hieronder heb je een lijst met ALLE laatst toegevoegde

[url]http://www.nzbtvseeker.com/New/[/url]
Offline Diko - 12/10/2008 03:21 (laatste wijziging 12/10/2008 03:21)
Avatar van Diko PHP interesse Wat een heerlijk niets zeggend database ontwerp hanteer jij zeg 

Op de volgende 2 tabellen heb ik een query gebouwd die zou moeten doen wat jij wilt:
Episodes: naam, episode, season, time, formaat, categorie
Series: naam, genres, images, text

In Oracle kun je het volgende gebruiken:
  1. SELECT DISTINCT e1.naam,
  2. MAX(e1.season)over(partition BY e1.naam),
  3. (SELECT MAX(e2.episode) FROM episodes e2 WHERE e2.naam = e1.naam GROUP BY e2.naam), s.text, s.genre
  4. FROM episodes e1
  5. LEFT JOIN Series s ON (s.naam = e1.naam);

Hoe dat zit met over() in MySQL weet ik niet precies.
Enige dat ik erover kon vinden is het volgende:
http://forums.m...msg-229413
http://forums.m...msg-225347
Offline HOND_NL - 13/10/2008 11:26
Avatar van HOND_NL Nieuw lid
Diko schreef:
Wat een heerlijk niets zeggend database ontwerp hanteer jij zeg 

Op de volgende 2 tabellen heb ik een query gebouwd die zou moeten doen wat jij wilt:
Episodes: naam, episode, season, time, formaat, categorie
Series: naam, genres, images, text

In Oracle kun je het volgende gebruiken:
[..code..]
Hoe dat zit met over() in MySQL weet ik niet precies.
Enige dat ik erover kon vinden is het volgende:
http://forums.m...msg-229413
http://forums.m...msg-225347


Super man ! , alleen moet ik de query nu omzetten in mysql standaard. Heb al een hoop geprobeerd ,maar ik denk dat mijn kennis niet toereikend genoeg is.
Iemand enig idee hoe je de query hierboven om kan zetten in mysql ?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.191s