2 querys, verknüpfen & sortieren?

breytex

Mitglied
Hallo zusammen!
Ich habe ein Problem..
Unzwar arbeite ich gerade an einem addon für eine Clanwebsite, dieses soll die 5 letzten Downloads ausgeben.
Es gibt 2 Downloadbereiche, einer auf der normalen Website, und einer im Forum (replays).

Ich möchte eine Box für die Website programmieren, in welcher die "letzten 5" ausgegeben werden.
So weit, so gut.

Ich bekomme beide Informationen per query aus der Datenbank,
das Problem ist nur, das die "letzten 5" nach Aktuallität sortiert sein sollen (der neuste nach ganz oben)

Wie mische ich jetzt also 2 array so, dass ich diese dannach immernoch...
a: unterscheiden kann (verschiedene verlinkung, da das eine ins Forum, das andere auf Website,
b: nach timestamp sortieren kann...

ich hoffe es hat jemand einen Vorschlag!

mfG
 
Hi,

du kannst aus den 2 Arrays ein Array machen und als Key nimmst du den Timestap.

Danach kannst du mit Hilfe von asort(), arsort(), krsort(), uksort(), sort(), natsort(),rsort(), ksort() alles sortieren lassen.
 
Hallo!

Eleganter wäre es natürlich, wenn du das Ganze schon mit dem Query so sortieren und/oder die beiden Querys in eine einzige Abfrage verpacken könntest.
 
Hallo zusammen,

und wie erstellt mal 2 Abfragen in einer Abfrage ?

Kann jemand weitere Infos oder Ansätze geben ? Ich Brauche das gleiche allerdings mit 5 Tabellen.

Wer kann helfen

Denis
 
Hi,

du kannst aus den 2 Arrays ein Array machen und als Key nimmst du den Timestap.

Danach kannst du mit Hilfe von asort(), arsort(), krsort(), uksort(), sort(), natsort(),rsort(), ksort() alles sortieren lassen.

danke für die Hilfe!
So ist es am besten, weil die beiden "downloadsektionen (forum/normal)" auch auf 2 verschiedenen Datenbanken liegen, und ich zu beiden einmal die Verbinung herstellen muss.

Jetzt aber nochmal ne Frage dazu:
Nen array aus der Funktion mysql_fetch_array ist doch ne art "Doppelarray".
Wie füge ich nun 2 solcher arrays zusammen?
Nehmen wir an, ich habe:

$files[titel]
$files[time]
$files[id]

und

$forum[titel]
$forum[time]
$forum[id]
 
Zuletzt bearbeitet:
Hallo,

Wenn ich es richtig verstanden habe, wäre das doch ein Fall für ein UNION bzw. UNION ALL.

Damit kannst du beide Abfragen verknüpfen und sortiert wird erst am Ende über alle Datensätze. Die Unterscheidung woher die Daten kommen bzw. worauf sie sich beziehen, machst du mittels einer zusätzlichen Datenbankspalte etwa so:

SQL:
SELECT d1.id, d1.name, d1.url, d1.uploaddate, 'forum' AS kategorie
  FROM downloads d1
 WHERE ....
UNION ALL
SELECT d1.id, d2.name, d2.url, d2.uploaddate, 'oeffentlich'
  FROM downloads d2
 WHERE ...
ORDER BY uploaddate DESC

in PHP kannst du dann die Spalte "kategorie" abfragen um herauszufinden,
zu welcher Kategorie der Download gehört.

Hoffe es hilft,

Markus
 
Hi!
Danke für die Hilfe...
das Problem an der Sache ist nur, dass das Forum und der DL-bereich je ne eigene DB-Tabelle haben und damit diese Funktion mir nicht hilft...

Ändern kann ich das auch Leider nicht.
Gibt es denn die Möglichkeit, die 2 arrays zusammenzufügen?
 
Hallo nochmal,

das Problem an der Sache ist nur, dass das Forum und der DL-bereich je ne eigene DB-Tabelle haben und damit diese Funktion mir nicht hilft...

Solange die Datentypen der beiden Tabellenspalten übereinstimmen bzw. sich konvertieren lassen, kannst du eine UNION bzw. UNION ALL trotzdem verwenden. Nicht gleich aufgeben ;)
Fuer nicht vorhandene Spalten in einer der beiden Tabellen gibst du eben NULL zurueck. Wichtig ist, dass in dem Fall in der ersten Tabelle auf jeden Fall Spalten-Aliase verwendet werden.

Hier nochmal die Hilfe fuer MySQL zu UNION & Co: http://dev.mysql.com/doc/refman/5.1/de/union.html

Markus
 
Zuletzt bearbeitet:
hm, ich werd mich mal einlesen, das Problem an der Sache ist nur, dass ich keine Serverdaten, sondern nur ein Backup des Forums und die relevante PHP-datei habe...
Mit anderen Worten, ich kann das SELECT des normalen Downloadbereiches nicht testen, habe aber die version, der Box, in der die letzten 5 Downloads der Website ausgegeben werden.
Ich soll sozusagen noch die letztem 5 des Forums dazu programmieren und quasi die Einträge mixen.
Daher wird das mit der Umsetzung der direkten sql Abfrage schwierig.
Gibt es nicht ne einfache Version, 2 arrays (eines, welches ich ja schon vorgefertigt habe, und eines, welches ich selbst schon für das Forum erstellt habe) mischen kann?

Okay, ich habs versucht, aber ich steig bei dem LEFT JOIN nicht richtig durch:
SQL:
(SELECT `topic_title` AS `title`, `topic_time` AS `time`, `topic_id` AS `id` 
FROM orion_topics  
WHERE `forum_id`="9" OR `forum_id`="10" OR `forum_id`="11" order by time desc) 
UNION LEFT 
JOIN fld  
(SELECT * FROM $tabelle_files order by time desc limit $settings[show_last_files])

funktioniert nicht...
 
Zuletzt bearbeitet von einem Moderator:
Zurück