WinFuture-Forum.de: Recht Komplizierter Sql-select - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Recht Komplizierter Sql-select


#1 Mitglied ist offline   AdrianQ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 104
  • Beigetreten: 13. August 05
  • Reputation: 0
  • Wohnort:berlin

geschrieben 17. Mai 2006 - 15:32

'lo

ich bin von haus aus kein sql-experte und habe gerade nen kleines problem mit dem jgs-portal für wbb. folgende situation:

ich möchte alle ankündigungen eines bestimmten forums nach postdatum sortiert abfragen.
SELECT i.iconpath, i.icontitle, p.*, t.* FROM bb".$n."_threads t LEFT JOIN bb".$n."_icons i ON (t.iconid=i.iconid) LEFT JOIN bb".$n."_posts p ON (p.threadid = t.threadid AND t.starttime = p.posttime) WHERE t.boardid='".$altern_news_id."' AND p.visible=1 GROUP by t.threadid ORDER BY t.starttime DESC LIMIT ".$altern_news_anzahl

liefert alle posts aus dem forum. in einer extratabelle (announcements) sind die ankündigungen genannt in der forum
boardid 		threadid
16 		747
28 		198
28 		245
28 		322
...


man müsste also aus dem ergebnis des selects oben nochmal die raussuchen, bei denen es einen eintrag in der table 'announcements' mit "boardid=".$n und "threadid=t.threadid" gibt. wie realisiert man so etwas am besten?

gruß
adrian
0

Anzeige



#2 Mitglied ist offline   nostromo33 

  • Gruppe: Mitglieder
  • Beiträge: 11
  • Beigetreten: 16. Mai 06
  • Reputation: 0

geschrieben 18. Mai 2006 - 06:46

Hänge in der Where Klausel einfach mal deine Unterabfrage noch dazu, alos AND ***;
0

#3 Mitglied ist offline   AdrianQ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 104
  • Beigetreten: 13. August 05
  • Reputation: 0
  • Wohnort:berlin

geschrieben 18. Mai 2006 - 14:37

und wie soll die abfrage aussehen?
0

#4 Mitglied ist offline   nostromo33 

  • Gruppe: Mitglieder
  • Beiträge: 11
  • Beigetreten: 16. Mai 06
  • Reputation: 0

geschrieben 18. Mai 2006 - 18:06

Where....... AND....... Group By ......
0

#5 Mitglied ist offline   AdrianQ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 104
  • Beigetreten: 13. August 05
  • Reputation: 0
  • Wohnort:berlin

geschrieben 18. Mai 2006 - 20:35

ist mir schon klar, aber der suchstring, wie soll der aussehen, hm?
0

#6 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 19. Mai 2006 - 16:23

omg ... bb".$n."_threads .. und $n ist die boardid?
das mag vielleicht "praktisch" erscheinen, aber warum gibt es keine bb_threads tabelle mit feld "boardid"?

nostromo, wie willst du das ohne exists bewerkstelligen?

mit exists kann ich mir das so vorstellen...

SELECT i.iconpath, i.icontitle, p.*, t.* FROM bb".$n."_threads t LEFT JOIN bb".$n."_icons i ON (t.iconid=i.iconid) LEFT JOIN bb".$n."_posts p ON (p.threadid = t.threadid AND t.starttime = p.posttime) WHERE t.boardid='".$altern_news_id."' AND p.visible=1 AND EXISTS ( SELECT * FROM ANNOUNCEMENTS WHERE boardid = $n AND threadid = t.threadid)
GROUP by t.threadid ORDER BY t.starttime DESC LIMIT ".$altern_news_anzahl
I'm mó. mo's good twin.
0

#7 Mitglied ist offline   AdrianQ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 104
  • Beigetreten: 13. August 05
  • Reputation: 0
  • Wohnort:berlin

geschrieben 19. Mai 2006 - 17:02

'lo

mo, der code ist nicht von mir, der ist aus dem portal bzw. dem board, da kann ich also nich viel machen. das mit dem 'exists' klingt sehr gut, sowas in der art hatte ich mir vorgestellt (jetzt wird vlt auch klar, wo mein problem war). was spricht dagegen, das mit exists zu machen?

gruß
adrian
0

#8 Mitglied ist offline   tobiasndw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.815
  • Beigetreten: 24. September 03
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 19. Mai 2006 - 17:14

@AdrianQ

nichts, tu's einfach :)
0

#9 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 20. Mai 2006 - 08:01

Zitat

was spricht dagegen, das mit exists zu machen?

nichts... das datenbankmodell stösst mir nur auf. :blink:
wenn alle threads in einer tabelle wären und in der tabelle sich ein feld "isAnnouncement" befinden würde, könnte man viel schneller an die ergebnisse kommen. natürlich muss man die felder wie boardid, threadid, isAnnouncement indizieren - aber das ist ja kein problem. in einem board wird die meiste zeit ohnehin gelesen und nicht gepostet.
mich würde jetzt interessieren, wie das portal heisst, das du da verwendest. das DBdesign ist schon sehr komisch :imao:.

grüsse,
mo
ps: mein query mit exists macht zu jedem (!) eintrag in einem board, der "...t.boardid='".$altern_news_id."' AND p.visible=1..." matcht ein "SELECT * FROM ANNOUNCEMENTS WHERE boardid = $n AND threadid = t.threadid". das kann grottenlangsam werden. hmmmm man müsste das andersrum machen ... erst die threads rausfinden, die ausgegeben werden sollen, und sie dann rausfiltern...
SELECT i.iconpath, i.icontitle, p.*, t.* FROM bb".$n."_threads t LEFT JOIN bb".$n."_icons i ON (t.iconid=i.iconid) LEFT JOIN bb".$n."_posts p ON (p.threadid = t.threadid AND t.starttime = p.posttime) WHERE t.boardid='".$altern_news_id."' AND p.visible=1

AND t.threadid IN ( SELECT threadid FROM ANNOUNCEMENTS)

GROUP by t.threadid ORDER BY t.starttime DESC LIMIT ".$altern_news_anzahl

warum soll das schneller sein? weil "SELECT threadid FROM ANNOUNCEMENTS WHERE boardid = $n AND threadid = t.threadid" gecached werden _sollte_. trotzdem bleibt es ein doofes datenbankschema :/.
I'm mó. mo's good twin.
0

#10 Mitglied ist offline   AdrianQ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 104
  • Beigetreten: 13. August 05
  • Reputation: 0
  • Wohnort:berlin

geschrieben 21. Mai 2006 - 18:50

'lo

@mo:

Beitrag anzeigenZitat (AdrianQ: 17.05.2006, 16:32)

[...] mit dem jgs-portal für wbb.


die db-struktur ist so, weil die tabelle announcements eine n:m-beziehung realisiert, da eine ankündigung verschiedenen foren zugeordnet werden kann. ansonsten - die db-struktur ist nicht von mir, ich muss nur drunter leiden. vielen dank auf jeden fall für deine hilfe!

gruß
adrian
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0