MySQL-Query gesucht

moses_78

moses_78

Aktives Mitglied
Thread Starter
Dabei seit
08.04.2005
Beiträge
1.288
Reaktionspunkte
22
Guten tag,

Also, ich arbeite hier mit Rails, und habe folgendes Problem:

Zuerst einmal führe ich (oder eher Rails...) diesen Query aus:
Code:
SELECT * FROM threads WHERE (sub_board_id = '2') ORDER BY last_post_date ASC LIMIT 0, 2

Nun möchte ich, dass an jede Zeile des zurückgegebenen Sets ein Feld
angehängt wird. Dieses Feld soll dann folgendes enthalten:

Nämlich die Anzahl der Ergebnisse, die in einer anderen Tabelle gefunden werden
konnten, wie es dieser Query machen würde.
Code:
SELECT COUNT(*) FROM posts WHERE `thread_id` = $AKTUELLE_ID

Dabei soll $AKTUELLE_ID der ID jeder zurückgelieferten Zeile des
ersten Queries entsprechen.

Ich hoffe wirklich, mich einigermaßen verständlich ausgedrückt
zu haben, und bin für jede Hilfe dankbar.

Gruß,
Mathias
 
Definier doch einfach einen counter, sollte auch um einiges schneller sein, such mal nach counter cache: http://wiki.rubyonrails.org/rails/pages/MagicFieldNames

Ansonsten geht dass dann auch über deinThread.posts.count oder so. So wie du dir das vorstellst ginge es auch, aber wie weiß ich so spontan nicht und wie gesagt, der cache sollte schneller sein.
 
Zuletzt bearbeitet:
Das kommt mir irgendwie unsauber vor :hum:

Aber wenns nicht anders geht...

EDIT: Das sieht nicht schlecht aus, danke.
 
Jetzt rein aus dem Gedächtnis: Irgendwie so:

SELECT T.attr1, T.attr2, COUNT(*) FROM table1 AS T, table2 AS F WHERE (T.key = F.forkey) GROUP BY T.key;
 
Danke, danke, werde das mal überprüfen.

PS. Warum müssen Datenbanken auch so beschissen
kompliziert sein? Und wie mag das erst bei richtig kom-
plexen DBMSsen aussehen?
 
Werde Rails mir erst bald antrainieren, aber gibt es da nicht einfach objektrelationales mapping, sprich Du hantierst mit Objekten und brauchst gar keine SQL-Anweisungen mehr?

Edit: Hab mal danach gesucht. Das scheint bei denen „Active Records“ zu heißen.
 
Schon richtig :)

Bloss lässt sich mit Active Records auch nicht alles lösen.
 
Code:
SELECT *, COUNT(p.id) as c 
FROM threads as t
LEFT JOIN posts as p ON t.id = p.thread_id
WHERE (sub_board_id = '2') 
ORDER BY last_post_date 
ASC LIMIT 0, 2

So sollte es auch klappen, zudem sehr datenbank schonend. Der Beitrag von DeiMudda hingegen sollte auch laufen, allerdings lädt dort SQL erst beide Tabellen und erstellt dann das Kreuzprodukt - viel ressourcenlastiger.


Btw.: SELECT * nicht gut.

Gruß
 
Zurück
Oben Unten