Voodoo: #1060 - Duplicate column name 'topicid'

Guten Tach!

Ich noch einmal (hoffentlich das letzte Mal).
Meine Tabelle:
-------------------------------------------------
| id | fid | tid | date   | title       | autor |
-------------------------------------------------
|  1 |  2  | 1   | 143456 | Hier und so | me    |
|  2 |  2  | 1   | 435868 | Bdlllaaa    | him   |
|  3 |  2  | 2   | 322455 | ... Aja     | we    |
|  4 |  2  | 2   | 012343 | Hmpfa!      | her   |

Ich brauch nun eine Query, die mir aus fid = 2
  1. für jede tid den kleinsten Wert an date und restliche Spalten liefert (Also den ältesten Datensatz).
  2. für jede tid den größten Wert an date und restliche Spalten liefert (also den neusten Datensatz).
  3. Beides über die tid verbindet.

Nach einigem Überlegen habe ich nun folgenden Query:

SELECT * FROM  
 (SELECT * FROM  
  (SELECT topicid, MIN(datum) mi FROM maris_board_posts GROUP BY topicid) minq,  
  maris_board_posts tab2  
 WHERE  
  tab2.forumid = 2  
  AND  
  tab2.topicid = minq.topicid  
  AND  
  tab2.datum = minq.mi) frage1,  
 (SELECT * FROM  
  (SELECT topicid, MAX(datum) ma FROM maris_board_posts GROUP BY topicid) maxq,  
  maris_board_posts tab1  
 WHERE  
  tab1.forumid = 2  
  AND  
  tab1.topicid = maxq.topicid  
  AND  
  tab1.datum = maxq.ma) frage2  
WHERE  
 frage1.topicid = frage2.topicid

Hierbei erhalte ich aber die betitelte Fehlermeldung. Natürlich kann es sein, dass mein Ansatz total dämlich ist oder sonst etwas. Ansonsten wäre es hilfreich zu erfahren, an welcher Stelle die Spalte doppelt vorkommt.
Ich bin gespannt :)

Gruß
Voodoo

  1. Hallo

    Guten Tach!

    Ich noch einmal (hoffentlich das letzte Mal).
    Meine Tabelle:

    | id | fid | tid | date   | title       | autor |

    |  1 |  2  | 1   | 143456 | Hier und so | me    |
    |  2 |  2  | 1   | 435868 | Bdlllaaa    | him   |
    |  3 |  2  | 2   | 322455 | ... Aja     | we    |
    |  4 |  2  | 2   | 012343 | Hmpfa!      | her   |

    Ich brauch nun eine Query, die mir aus fid = 2
      1. für jede tid den kleinsten Wert an date und restliche Spalten liefert (Also den ältesten Datensatz).
      2. für jede tid den größten Wert an date und restliche Spalten liefert (also den neusten Datensatz).
      3. Beides über die tid verbindet.

    Nach einigem Überlegen habe ich nun folgenden Query:

    SELECT * FROM

      
    Hier geht es schon los:  
      
    Verwende nicht SELECT \*  
    Verwende Tabellenaliase  
      
    und gehe hübsch Schritt für Schritt vor:  
      
    1\. Erstelle die Query, die Dir für jede tid den Datensatz mit dem kleinsten Wert von "date" (und den restlichen Spalten) erstellt.  
      
    2\. Erstelle die Query, die Dir für jede tid den Datensatz mit dem größten Wert von "date" (und den restlichen Spalten) erstellt.  
      
    Dazu hatte ich Dir ja schon den Link zu korrelierten Subselects gepostet.  
      
    3\. Verbinde beide Queries mit einem INNER JOIN über die tid.  
       Verwende Aliasnamen für die beiden Queries als temporärer Join.  
      
    Denke daran, dass Du in einer Zeile jeweils die zugehörigen Werte zum kleinsten als auch zum größten date-Wert hast. Im Original heißen die Spalten gleich. Benenne sie zum bequemeren Zugriff in der API unterschiedlich.  
      
      
      
    Freundliche Grüße  
      
    Vinzenz