🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Top 10 liste machen

Alles zur Programmierung im LibreOffice.
Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Top 10 liste machen

Beitrag von Atwist » Sa 21. Nov 2015, 17:01

Hallo,

Ich mochte gerne eine Top 10 liste filter machen, Problem ist dass ich nicht weiß wie ich dass machen soll.

Was ich sehen will ist von einen bestimmtes Jahr, zum Beispiel 2006.

Platz Artiest Song Jaar
1 Oueen / Bohemian Rhapsody / 1975
2 Boudewijn de Groot / Avond / 1997
3 Eagles / Hotel California / 1977

Wie muss ich dass machen.

Der Link nach Datei https://copy.com/8IVYteUnJ0tWNpCY
Schöne grüße aus Emsland

Andreas

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Top 10 liste machen

Beitrag von gogo » Sa 21. Nov 2015, 22:46

Für 2006

Code: Alles auswählen

SELECT "artiest", "titel", "2006" FROM "Lijst" ORDER BY "2006" DESC limit 10
Falls Du was flexibleres brauchst, musst Du umcodiern:

Z.B. mit einer Tabelle:
ID, artiest, titel, jahr, rank_jahr, rank
2172, Billy Joel, James, 2005, 1666
2173, Billy Joel, James, 2006, 1998
2174, Billy Joel, James, 2007, 1887
2175, Billy Joel, James, 2008, 1811
...

Code: Alles auswählen

SELECT "artiest", "titel", "rank" FROM "Lijst" WHERE "rank_jahr"= :welches_Jahr ORDER BY "rank" DESC limit 10
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Top 10 liste machen

Beitrag von F3K Total » Sa 21. Nov 2015, 23:22

Habe die Tabelle geteilt und so alle Titel untereinander geschrieben, dann geht es ganz leicht.
Gruß R
Dateianhänge
Top2000nieuw.zip
(802.48 KiB) 146-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Re: Top 10 liste machen

Beitrag von Atwist » So 22. Nov 2015, 08:31

@ gogo

Vielen dank für diese Lösung dem Befehl "DESC limit" kante ich nicht.
Ich brachte etwas zeit um deine Lösung zu verstehen, aber es hat geklappt .

Danke

@ F3K Total

Das ist ja eine komplett Lösung muss jetzt mal sehen was Du alles gemacht hast es ist viel geändert jetzt muss ich noch verstehen wie dass alles funktioniert.

Aber bin sehr froh mit diese Lösung.

DANKE
Schöne grüße aus Emsland

Andreas

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Top 10 liste machen

Beitrag von F3K Total » So 22. Nov 2015, 10:43

Atwist hat geschrieben:... muss jetzt mal sehen was Du alles gemacht hast es ist viel geändert jetzt muss ich noch verstehen wie dass alles funktioniert.
Hi,
ich versuche mal das wichtigste zu erklären.
Zunächst habe ich noch eine Änderung durchgeführt, VALUE heißt nun RANK.
Damit du nachvollziehen kannst, was ich gemacht habe, anbei deine Originaldatei, ohne Änderungen an den Tabellen.
Das schwierigste ist, aus deiner Tabellenmatrix, wo die Jahre nebeneinander angeordnet sind, eine Tabelle zu machen, in der alle Werte untereinander angeordnet sind. So ist es möglich mit einem Suchbegriff alle Werte zu filtern.
Führe EINMAL über Extras/SQL... die folgenden Befehle aus (Copy/Paste -> Ausführen):

Code: Alles auswählen

CREATE TABLE "RANK_JAAR"("JAAR" INTEGER NOT NULL,"FK_ID" INTEGER NOT NULL,"RANK" INTEGER,PRIMARY KEY("JAAR","FK_ID"));
ALTER TABLE "RANK_JAAR" ADD CONSTRAINT FKIDTITEL FOREIGN KEY("FK_ID") REFERENCES "Lijst"("ID") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "zoekfilter" ADD COLUMN "F-Top-jaar" INTEGER
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 1999, ID, "1999" FROM "Lijst" WHERE "1999" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2000, ID, "2000" FROM "Lijst" WHERE "2000" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2001, ID, "2001" FROM "Lijst" WHERE "2001" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2002, ID, "2002" FROM "Lijst" WHERE "2002" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2003, ID, "2003" FROM "Lijst" WHERE "2003" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2004, ID, "2004" FROM "Lijst" WHERE "2004" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2005, ID, "2005" FROM "Lijst" WHERE "2005" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2006, ID, "2006" FROM "Lijst" WHERE "2006" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2007, ID, "2007" FROM "Lijst" WHERE "2007" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2008, ID, "2008" FROM "Lijst" WHERE "2008" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2009, ID, "2009" FROM "Lijst" WHERE "2009" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2010, ID, "2010" FROM "Lijst" WHERE "2010" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2011, ID, "2011" FROM "Lijst" WHERE "2011" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2012, ID, "2012" FROM "Lijst" WHERE "2012" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2013, ID, "2013" FROM "Lijst" WHERE "2013" > 0;
INSERT INTO RANK_JAAR (JAAR, FK_ID, RANK) SELECT 2014, ID, "2014" FROM "Lijst" WHERE "2014" > 0;
ALTER TABLE "Lijst" DROP "1999";
ALTER TABLE "Lijst" DROP "2000";
ALTER TABLE "Lijst" DROP "2001";
ALTER TABLE "Lijst" DROP "2002";
ALTER TABLE "Lijst" DROP "2003";
ALTER TABLE "Lijst" DROP "2004";
ALTER TABLE "Lijst" DROP "2005";
ALTER TABLE "Lijst" DROP "2006";
ALTER TABLE "Lijst" DROP "2007";
ALTER TABLE "Lijst" DROP "2008";
ALTER TABLE "Lijst" DROP "2009";
ALTER TABLE "Lijst" DROP "2010";
ALTER TABLE "Lijst" DROP "2011";
ALTER TABLE "Lijst" DROP "2012";
ALTER TABLE "Lijst" DROP "2013";
ALTER TABLE "Lijst" DROP "2014";
ALTER TABLE "Lijst" DROP "2015";
ALTER TABLE "Lijst" DROP "2016";
CHECKPOINT DEFRAG
Dann in den Bereich der Tabellen wechseln und Menü Ansicht/Tabellen aktualisieren

Was passiert:
  • Code: Alles auswählen

    CREATE TABLE "RANK_JAAR" ...
    ...erzeugt die neue Tabelle RANK_JAAR
  • Code: Alles auswählen

    ALTER TABLE "RANK_JAAR" ...
    ...erzeugt die Beziehung, die du unter Extras/Beziehungen sehen kannst
  • Code: Alles auswählen

    ALTER TABLE "zoekfilter" ADD COLUMN
    ...erzeugt eine zusätzlich Spalte in der Tabelle "zoekfilter"
  • Code: Alles auswählen

    INSERT INTO RANK_JAAR ...
    ...fügt nun die Werte der Spalten 1999-2016 deiner Tabelle "Lijst" untereinander in die neue Tabelle ein
  • Code: Alles auswählen

    ALTER TABLE "Lijst" DROP ...
    ...löscht anschließend die Spalten 1999-2016 aus deiner Tabelle "Lijst"
  • Code: Alles auswählen

    CHECKPOINT DEFRAG
    komprimiert die Datenbank
Das neue Formular
  • Zoekscherm_F3K
und die Abfragen
  • q_Top2000
  • Qzoekfilter1_F3K
habe ich schon eingebaut, ab jetzt müssten sie auch funktionieren.

Versuchs mal, aber unbedingt mit angehängten Beispiel.
Gruß R
Dateianhänge
Top2000nieuw_prepared_F3K.zip
nur entpacken
(565.86 KiB) 139-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Re: Top 10 liste machen

Beitrag von Atwist » So 22. Nov 2015, 13:54

Ich finde es immer noch schwierig zu verstehen was Du gemacht hast, dafür sind meine Kenntnisse von Base zu niedrig war schon froh das ich soweit gekommen bin :? .

Mit deine Erklärung versuch ich mich schlau zu machen.

Aber Du machst schöne Sachen .

Habe Deine Datei versucht und habe etwas gefunden was nicht stimmt, ich bekomme keine Auskunft bei die Value im mittlere Tabelle.
Und was ich noch nicht verstehen kann ist wie ich die ranking von 2015 eingeben kann (die ranking ist noch nicht bekannt)
Schermafdruk.png
Schermafdruk.png (93.3 KiB) 3594 mal betrachtet
Schöne grüße aus Emsland

Andreas

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Top 10 liste machen

Beitrag von F3K Total » So 22. Nov 2015, 14:29

Hallo, da habe ich vergessen VALUE durch RANK zu ersetzen:
Rechtsklick auf das Formular Zoekscherm_F3K Bearbeiten, Rechtsklick auf Spaltenkopf VALUE -> Spalte.../Reiter Daten -> Datenfeld -> wähle RANK -> Formular speichern -> Datenbank speichern
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Re: Top 10 liste machen

Beitrag von Atwist » So 22. Nov 2015, 15:18

Und was ich noch nicht verstehen kann ist wie ich die ranking von 2015 eingeben kann (die ranking ist noch nicht bekannt)
Dass ging noch einfach und habe auch gesehen dass die Jahr liste automatisch wird angepasst so langsam an verstehe ich die Aufbau und die Filters.

Ich bedanke mich bei dir

VIELEN DANK
Schöne grüße aus Emsland

Andreas

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Top 10 liste machen

Beitrag von gogo » So 22. Nov 2015, 15:24

Atwist hat geschrieben:... dem Befehl "DESC limit" kante ich nicht...
den gibt's auch nicht ;)

DESC bezieht sich auf ORDER BY und definiert ob absteigend oder aufsteigend sortiert wird. Der "ORDER BY"-Befehl wird standardmäßig als ASC (ascending) ausgeführt. Man muss also nicht "ORDER BY MeinFeld ASC" schreiben wenn man eine aufsteigende Sortierung wünscht. Für absteigende Sortierungen braucht's aber das DESC.

LIMIT m (bzw. LIMIT m OFFSET n)(*) ist eine eigenständige SQL-Anweisung, die den Server anweist nur m Zeilen zu suchen und dann aufzuhören. Dabei ist es wichtig zu wissen , dass es bei ex-aequo-Ergebnissen KEINE Regel gibt welcher Datensatz auf Platz 10 landet und welcher auf 11! Der elfte Datensatz wird natürlich NICHT geliefert, LIMIT 10 ist eben LIMIT 10.
Um alle ex-aeqo-Ergebnisse für Platz 10 zu sehen muss man etwa so vorgehen:

Code: Alles auswählen

Select * from TabelleX 
  where Rang >= (select Rang from TabelleX order by Rang desc LIMIT 1 OFFSET 9
                 )
   order by Rang desc;
Wobei die Sub-Query "select Rang from TabelleX order by Rang desc limit 1 OFFSET 9" den Wert des Feldes "Rang" des 10. Datensatzes ausgibt (Zählung beginnt bei 0!)

Anmerkung:
(*): OFFSET n bedeutet, dass n die Zeilen übersprungen werden und erst m Datensätze ab Zeile n+1 ausgegeben werden (siehe HSQL-DB-Doku). Das Schlüsselwort "OFFSET" ist bei der HSQLDB die bei LO 4.0.4. eingesetzt wird ein Muss! Ein Leerzeichen oder Komma (wie in MySQL) genügt nicht!
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Top 10 liste machen

Beitrag von F3K Total » So 22. Nov 2015, 22:38

Atwist hat geschrieben:Und was ich noch nicht verstehen kann ist wie ich die ranking von 2015 eingeben kann
Wenn du die Ergebnisse von 2015 hast z.B. als Calc oder .csv, komm wieder, das geht mit ein paar SQL-Befehlen ...
R
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten