Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Anzeigen von Sendern(TV) sortiert nach Uhrzeit (https://www.delphipraxis.net/160300-anzeigen-von-sendern-tv-sortiert-nach-uhrzeit.html)

Cyberaxx 6. Mai 2011 10:52

Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Hallo

Ich habe ein problem damit die verschiedenen Sender nach Urzeit nebeneinander anzuzeigen.

Daten sind in MySQL gespeichert.
Zitat:

epg_channels (id, name)
epg_program (id, day, channel_id, prg_begin, prg_end, name, beschreibung)
Ich möchte die Daten nun gerne so anzeigen lassen das in der ersten Spalte die Uhrzeit steht und in den folgenden Spalten jeweils das Programm.

Uhrzeit | Pro7 | Sat1 | Vox | ...

Jeder Sender hat natürlich unterschiedliche Anfangszeiten.

Kann man das in einer Abfrage lösen?

Ich würde ungerne eine Tabelle bauen in der ich die Sender fest einbinde, wäre mir zu unflexibel..

Hat hierzu jemand einer Lösung und kann mir helfen?

MfG
Cyberaxx

DeddyH 6. Mai 2011 12:32

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Die Sender auf verschiedene Spalten aufzuteilen dürfte recht aufwändig sein, wenn es aber auch in einer einzigen Spalte geht, kannst Du Dir einmal GROUP_CONCAT() ansehen.

Cyberaxx 6. Mai 2011 12:38

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Es sollten schon für jeden Sender eine Spalte sein.

Habe es im Moment so gelöst das ich 24 Abfragen habe. Für jede Stunde eine. Diese füge ich dann ins Grid ein.
Beim laden merkt man davon kaum etwas, das es für jede Stunde eine Abfrage ist.

Schön ist es dennoch auch nicht gerade.

Das GROUP_CONTACT() werde ich mir mal ansehen.

Danke

alfold 6. Mai 2011 13:22

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Zitat:

Zitat von Cyberaxx (Beitrag 1099329)
Es sollten schon für jeden Sender eine Spalte sein.

Habe es im Moment so gelöst das ich 24 Abfragen habe. Für jede Stunde eine. ....

mh... Bin zwar kein SQL experte aber warum 24 Abfragen?
Eine reicht doch aus, mit der aktuellen Uhrzeit -paar minuten.
bzw als increment in einer For Schleife die Uhrzeit durchselectieren.

Oder bei der manuellen Eingabe reicht auch eine Abfrage aus. Dann mit select oder findselect oder wie das heisst die Zeile nehmen der der Uhrzeit entspricht und Anzeigen.
Falls ich das da oben Missverstanden habe, dann sorry:?

Gruss alfold

Jumpy 6. Mai 2011 13:30

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Die Aufgabenstellung hat ein bißchen was von einer Pivot-Tabelle. Gibts da nix?

Ansonsten erzeugt folgende Funktion SQL für eine Art Pseudo-Pivot-Tabelle:

Die Zeile
s.Add('Where day ='+DerGesuchteTag);
muss natürlich irgendwie angepasst werden.

Wenn Stundenzeiträume gewünscht werden wird das Ganze natürlich nochetwas komplizierter...

Delphi-Quellcode:
function TForm1.SQL_Main: String;
var s : TStringlist;
begin
  s:= TStringlist.Create;
  s.Add('SELECT UHRZEIT');

  s.Add(SQL_SenderZeit);

  s.Add('FROM');
  s.Add('(');
  s.Add('Select Distinct prg_begin as UHRZEIT From epg_program');
  s.Add('Where day ='+DerGesuchteTag);
  s.Add(') D');
  Result:=s.Text;
  s.Free;
end;


function TForm1.SQL_SenderZeit: String;
var
  s : TStringList;
  q : TADOQuery;
begin
  s := Tstringlist.Create;
  q := TADOQuery.Create(nil);
  q.Connection:= ;//hier eine ADO-Connection übergeben
  q.SQL.Add('Select id, name From epg_channels');
  q.Open;
  q.First;
  while not q.Eof do
    begin
    s.Add('(');
    s.Add('Select name From epg_program');
    s.Add('Where day = '+DerGesuchteTag);
    s.Add('And prg_begin = D.Uhrzeit');
    s.Add(') As '+q.fieldbyname('name').AsString);
    q.Next;
    if not q.Eof then s.Add(',')
    end
  Result:=s.Text;
  s.Free;
  q.Free;
end;

Cyberaxx 6. Mai 2011 15:20

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Ja sie soll aufgebaut sein wie eine normale Programmzeitschrift.
Delphi-Quellcode:
---------------------------------------------------------------------
05:00 | 05:50 - 05:20 | 05:30 - 10:00 ... | 05:35 - 06:15
      | Wa are Family | Die dreisten drei | Die Nanny
---------------------------------------------------------------------
07:00 | 07:30 - 07:50 | 07:20 - 08:20 ... | 
      | The Big Bang | Infomercials .... |
      | ............. | ................. | 
      | 07:50 - 08:20 | ................. |
      | The Big Bang | ................. |
---------------------------------------------------------------------
08:00 |
Ich habs halt nun so gelöst das ich es als 24 einzelabfragen habe Begin >= '05:00' AND begin < '06:00'

mschaefer 6. Mai 2011 15:50

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Moin zusammen,

so als Feierabendsaufgabe habe ich das gerade mal angeschaut. Die Query zu generieren ist schon eine gute Idee, aber das mit dem SQL in einer Abfrage funktionier so noch, sagen wir suboptimal:

Code:
----------------------------- 
     time ch prog        
----------------------------- 
     19:15 1 heute
     19:30 2 wetter
     19:45 3 Pacman
     20:00 4 Tages
     20:15 1 Kontraste
     19:35 2 Sonder
     19:45 3 Lotte
     19:00 4 Mainzel
-----------------------------
Die SQL-Abfrage mit vier Kanälen (das könnte Ralph vielleicht einbauen):
Code:
   create table prgview as
   select distinct
       tall.time as time
      ,tch1.time as ch_1
      ,tch1.prog as pg_1 
      ,tch2.time as ch_2
      ,tch2.prog as pg_2 
      ,tch3.time as ch_3
      ,tch3.prog as pg_3 
      ,tch4.time as ch_4
      ,tch4.prog as pg_4 
   from      prograw as tall
   left join prograw as tch1  on (tall.time = tch1.time) and (tch1.ch=1)
   left join prograw as tch2  on (tall.time = tch2.time) and (tch2.ch=2)
   left join prograw as tch3  on (tall.time = tch3.time) and (tch3.ch=3)
   left join prograw as tch4  on (tall.time = tch4.time) and (tch4.ch=4)
   ;
als Beipielergebnis bekommt man aus obigen

Code:
Nr. time    ch_1    pg_1         ch_2     pg_2      ch_3     pg_3      ch_4     pg_4

 1 19:00        .                   .                 .             19:00    Mainzel
 2 19:15    19:15    heute          .                 .                 .          
 3 19:30        .               19:30    Wetter       .                 .          
 4 19:35        .               19:35    Sonder       .                 .          
 5 19:45        .                   .             19:45    Lotte        .          
 6 19:45        .                   .             19:45    Pacman       .          
 7 20:00        .                   .                 .             20:00    Tages
 8 20:15    20:15    Kontrast       .                 .                 .
Habe jetzt hier kein Delphi und vielleicht kann man es auch noch optimieren, aber die Abfrage kann so mit beliebigen Zwischenzeiten umgehen.

Grüße in die Runde

Jumpy 6. Mai 2011 16:16

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Zitat:

Zitat von mschaefer (Beitrag 1099367)
Kanälen (das könnte Ralph vielleicht einbauen):
Code:
   create table prgview as
   select distinct
       tall.time as time
      ,tch1.time as ch_1
      ,tch1.prog as pg_1 
      ,tch2.time as ch_2
      ,tch2.prog as pg_2 
      ,tch3.time as ch_3
      ,tch3.prog as pg_3 
      ,tch4.time as ch_4
      ,tch4.prog as pg_4 
   from      prograw as tall
   left join prograw as tch1  on (tall.time = tch1.time) and (tch1.ch=1)
   left join prograw as tch2  on (tall.time = tch2.time) and (tch2.ch=2)
   left join prograw as tch3  on (tall.time = tch3.time) and (tch3.ch=3)
   left join prograw as tch4  on (tall.time = tch4.time) and (tch4.ch=4)
   ;

Das ist eine interessante Idee mit den x-fachen Joins auf sich selbst. So clever hab ich gar nicht gedacht. Auch dieses Statement läßt sich ja dynamisch generieren und das sollte das Ziel sein, denn man will das ja nicht jedes mal neu anpacken, nur weil ein Sender dazugekommen ist.

Das einzige Problem ist dabei das Ganze in einen Zeitraum zu "Zwängen", denn dann bekommt man ja pro Tabellenzelle, wenn man so will, u.U. mehrere Ergebnisse, siehe 7-8 Uhr die beiden Big Bangs.
Da würde meine Variante auf jeden Fall an die Wandfahren, ala "single-query returns more than one object". Die join-Variante ließe sich so gestalten, dass die das überlebt, glaub ich.

Zitat:

Zitat von Cyberaxx (Beitrag 1099361)
Delphi-Quellcode:
---------------------------------------------------------------------
05:00 | 05:50 - 05:20 | 05:30 - 10:00 ... | 05:35 - 06:15
      | Wa are Family | Die dreisten drei | Die Nanny
---------------------------------------------------------------------
07:00 | 07:30 - 07:50 | 07:20 - 08:20 ... | 
      | The Big Bang   | Infomercials .... |
      | ............. | ................. | 
      | 07:50 - 08:20 | ................. |
      | The Big Bang   | ................. |
---------------------------------------------------------------------
08:00 |


mschaefer 6. Mai 2011 16:54

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Du hast die Generierung ja schon auf den Weg gebracht, da konnte ich aufbauen. Man braucht noch Hilfsvariablen für Zeitbereiche, die könnte ich noch mit"between" genereiren (between 19 and 20) as Hour_19. An den Feinheiten muß ich noch feilen.

Grüße


PS: Sehe gerade, dass man auf Ch 3 um 19.45 ein geteiltes Bild hat ...

Cyberaxx 6. Mai 2011 17:10

AW: Anzeigen von Sendern(TV) sortiert nach Uhrzeit
 
Das muss ich mir mal durch den Kopf gehen lassen.
Das Statement sieht bestimmt recht nett aus wenn ich alle 44 Sender anzeigen lasse. :D

Ist dies dann eine Temporäre Tabelle nur für die ansicht?

Das mit dem geteilten Bils, hab ich auch eben gesehen, kommt so wirklich vor, nur das es dann nach Regionen geht.
Somit starten auf einem Sender 3 Sendungen gleichzeitig aber werden in unterschiedlichen Regionen nur empfangen.
Da muss ich meinen Import nochmal ein wenig anpassen.

Was allerdings noch fehlen würde bei diesem Tabellenaufbau, ich habe natürlich zur Verdeutlichung nicht alle
Spalten angegeben. Es kommen da z.B. noch hinzu die Endzeit und die Beschreibung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz