PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   2 Tabellen: Nach IDs ordnen, 10 neuesten Datensätze pro ID ausgeben (http://www.selfphp.de/forum/showthread.php?t=23282)

Phantasielos 20.05.2010 19:17:18

2 Tabellen: Nach IDs ordnen, 10 neuesten Datensätze pro ID ausgeben
 
Hi :)

Ich habe grundlegende MySQL Kenntnisse (JOINS, ORDER BY, LIMIT usw.) die für meine Zwecke bisher ausgereicht haben, aber heute komme ich nicht weiter, weder mit Google noch mit der mysql Doku.

Ich hoffe ihr könnt mir helfen.

Ich habe zwei Tabellen in einer Datenbank:

Tabelle 1
Code:

tagid      tag
1          Tag 1
2          Tag 2
3          Tag 3
4          Tag 4
5          Tag 5

die tagid ist eindeutig

Tabelle 2
Code:

id      title      ttagid    zeit
1    Titel 1        2    15641651
2    Titel 343      1  15151511
3    Titel 53        5  15615616
4    Titel gerg    5  12021
5    Titel fwef    3  1518410
6    Titel 34f3    4  156156541
7    Titel fesfef  2  11651561

id ist eindeutig
zeit = time()


Tabelle 2 kann viele tausend Datensätze enthalten.

die Tabelle2.ttagid ist gleich Tabelle1.tagid, jetzt möchte ich die tags aus Tabelle 1 Ordnen (jede Ordnung muss möglich sein, 1-5 oder 5-1 oder auch z.B. 5,3,4,1,2). Dann soll für jeden tag die 10 zugehörigen, neuesten Datensätze ausgegeben werden.

Beispiel:
-> 3 - Tag 3
10 neusten Datensätze aus Tabelle 2 WHERE ttagid=3
-> 1 - Tag 1
10 neusten Datensätze aus Tabelle 2 WHERE ttagid=1


Wie würdet ihr das lösen?
Eine einzige Abfrage, wenn ja, wie sollte die in etwa aussehen?

Oder soll ich das Ganze aus Performance Gründen in mehrere Abfragen aufteilen (was ich selbst auch schaffen würde)

Ckaos 21.05.2010 00:47:48

AW: 2 Tabellen: Nach IDs ordnen, 10 neuesten Datensätze pro ID ausgeben
 
Hi

Zitat:

zeit = time()
Ist nicht wirklich gut um mit dem Datum/Zeit zu rechnen/sortieren

Aber nun zu deinem eigentlichen prob
Zitat:

Wie würdet ihr das lösen?
Mit
Code:

ORDER BY FIELD(tagid,5,3,4,1,2)
Zitat:

Dann soll für jeden tag die 10 zugehörigen, neuesten Datensätze ausgegeben werden.Eine einzige Abfrage, wenn ja, wie sollte die in etwa aussehen?
Etwa so: SELECT ...FROM...LEFT JOIN....ON.....ORDER BY FIELD..... ,zeit DESC LIMIT 50
Und dann per Abfragende Sprache (php?) die Ausgabe sortieren

mfg

Ckaos

Phantasielos 21.05.2010 07:08:26

AW: 2 Tabellen: Nach IDs ordnen, 10 neuesten Datensätze pro ID ausgeben
 
Zitat:

Etwa so: SELECT ...FROM...LEFT JOIN....ON.....ORDER BY FIELD..... ,zeit DESC LIMIT 50
Und dann per Abfragende Sprache (php?) die Ausgabe sortieren
Das Problem dabei ist das die Tabelle 2 auch 100.000 Einträge haben kann. Wenn ich jetzt 12 Kategorien von 20 abfragen will, ergibt das bei 10 Einträgen pro Kategorie 120 Ergebnisse. Bei deiner Abfrage von Limit 50 geht das schon mal nicht, wenn dann muß ich alle 100.000 abfragen und mit PHP mir die gewünschten rauspicken. Das ist keine elegante Lösung.
Hat noch jemand eine Idee?

Ckaos 21.05.2010 07:41:09

AW: 2 Tabellen: Nach IDs ordnen, 10 neuesten Datensätze pro ID ausgeben
 
Hi

Zitat:

Hat noch jemand eine Idee?
Ja ich, gib nächstes mal die ganzen Rahmenbedinungen an.
Meine nicht so
Zitat:

elegante Lösung
bezog sich auf 5 tags und 10 Ergebnisse.
= ?

Zitat:

Wenn ich jetzt 12 Kategorien von 20 abfragen will
Das geht schon mal nicht mit ORDER BY FIELD in einem step.
Da bei dem Muster von 12 angewendet auf 20, 8 unsortiert werden.
Zauberwort: Temporäre Tabelle
In die packst du deine 12 tags rein und machst dann die Abfrage mit
LIMIT 120.
Dann hast du auch deine 120 Ergebnisse.

Denke nur um das dynamisch zu halten wird eine Funktion die den
Query und die Temptabelle baut nötig sein.

Und nun probiere das vorgestellte erstmal aus und präsentiere deine Ergebnisse. Hier ist eigeninitative gefragt und die hättest du nach meinem Vorschlag schon zeigen können.

mfg

Ckaos

Phantasielos 22.05.2010 23:00:28

AW: 2 Tabellen: Nach IDs ordnen, 10 neuesten Datensätze pro ID ausgeben
 
Ich habe jetzt verstanden was du meinst Ckaos, du hast aufgrund meiner Angaben einen völlig logischen Lösungsvorschlag gebracht.

Was deine Idee mit der temporäten Tabelle angeht: auch diesen Lösungsweg habe ich in der Theorie verstanden. Leider bin ich offenbar zu blöd diese Therorie in eine funktionierende SQL Abfrage umzuwandeln.

Das Ganze ich mehr ein Spaß Projekt als etwas das jemals produktiv eingesetzt werden wird. Deshalb habe ich es einfach aufgegeben und beschloßen mich meinem einzigen sinnvollen Projekt und dem Privatleben zu widmen anstatt hier nochmal viele Stunden zu verbraten.

Danke für deine Hilfe.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:04:58 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.