Announcement

Collapse
No announcement yet.

Tabelle richtig verknüfen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabelle richtig verknüfen

    Hallo,

    ich komme leider nicht mehr weiter.

    Ich habe eine Tabelle user as u

    Code:
    u.user_id | u.username
    und eine Tabelle pictures as p

    Code:
    p.pid | p.user_id
    Ich will folgendes Ergebnis haben:

    Sortiert nach dem Wert pid will ich die Tabelle user absteigend ausgeben und pro User die letzten 4 Bilder anzeigen lassen (wieder sortiert nach pid absteigend).

    Ich habe mit folgendem SQL-Code rumprobiert, der aber dazu führte das mein SQL-Server 10 Stunden nicht erreichbar war, deshalb bin ich noch nicht so weit gekommen.

    Code:
    SELECT 
    u.user_id,
    u.username,
    max(p1.pid) as p1_pid, 
    p2.pid as p2_pid,
    p3.pid as p3_pid,
    p4.pid as p4_pid
    
    FROM 
    users as u
    
    LEFT JOIN pictures as p1 on (p1.user_id=u.user_id) 
    LEFT JOIN pictures as p2 on (p2.user_id=u.user_id) 
    LEFT JOIN pictures as p3 on (p3.user_id=u.user_id) 
    LEFT JOIN pictures as p4 on (p4.user_id=u.user_id) 
    
    GROUP BY u.user_id, u.username
    Ich wollte immer den größten pid-Wert abfragen und beim Left join die bereit abgefragten ausschließen...

    Code:
    SELECT  
    u.user_id,
    u.username, 
    max(p1.pid) as p1_pid, 
    max(p2.pid) as p2_pid, 
    max(p3.pid) as p3_pid, 
    max(p4.pid) as p4_pid
    
    FROM 
    users as u
    
    LEFT JOIN pictures as p1 on (p1.user_id=u.user_id) 
    LEFT JOIN pictures as p2 on (p2.user_id=u.user_id and p2.pid!=p1_pid) 
    LEFT JOIN pictures as p3 on (p3.user_id=u.user_id and p3.pid!=p1_pid and p3.pid!=p2_pid) 
    LEFT JOIN pictures as p4 on (p4.user_id=u.user_id and p4.pid!=p1_pid and p4.pid!=p2_pid and p4.pid!=p3_pid) 
    
    GROUP BY u.user_id, u.username
    Ich weiss, das das da oben nicht funktionieren wird, ich würde mich sehr über einen funktionierenden Ansatz freuen.

    Gruß fuchs2
    Zuletzt editiert von fuchs2; 19.06.2008, 18:02.

  • #2
    Originally posted by fuchs2 View Post
    ...Ich wollte immer den größten pid-Wert abfragen und beim Left join die bereit abgefragten ausschließen...
    Dieser Ansatz ist richtig, aber du mußt dann auch den GRÖßTEN Wert nehmen.
    [highlight=sql]
    SELECT u.user_id, u.username,
    p1.pid as p1_pid, p2.pid as p2_pid, p3.pid as p3_pid, p4.pid as p4_pid
    FROM users as u
    LEFT JOIN pictures as p1 on (p1.user_id = u.user_id
    and p1.pid = (
    select max(i1.pid from pictures i1 where i1.user_id = u.user_id
    ))
    LEFT JOIN pictures as p2 on (p2.user_id = u.user_id
    and p2.pid = (
    select max(i2.pid from pictures i2 where i2.user_id = u.user_id
    and i2.pid < p1.pid
    ))
    LEFT JOIN pictures as p3 on (p3.user_id = u.user_id
    and p3.pid = (
    select max(i3.pid from pictures i3 where i3.user_id = u.user_id
    and i3.pid < p2.pid
    ))
    LEFT JOIN pictures as p4 on (p4.user_id = u.user_id
    and p4.pid = (
    select max(i4.pid from pictures i4 where i4.user_id = u.user_id
    and i4.pid < p3.pid
    ))
    order by u.user_id, u.username
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X