Hubble: MySQL JOIN: Ausgabe von Feld aus Tabelle 2 nach Anfrage für Tabe

Beitrag lesen

Vielen Dank für die ausführliche Beschreibung! :)
Ich hatte allerdings scheinbar unüberwindbare Syntaxfehler ab allem nach  ) rc

  
SELECT  
    p.page_namespace,  
    p.page_title,  
    p.page_is_redirect,  
    rc.rc_timestamp,  
    rc.rc_user,  
    rc.rc_user_text  
FROM  
    page p  
LEFT OUTER JOIN (  
    SELECT  
        rc_title,  
        rc_timestamp,  
        rc_user,  
        rc_user_text  
    FROM  
        recentchanges rc1  
    WHERE  
        rc1.rc_id = (  
            SELECT  
                MIN(rc2.rc_id)  
            FROM  
                recentchanges rc2  
            WHERE  
                rc2.rc_title = rc1.rc_title  
        )  
    ) rc  
WHERE page_is_redirect = 0 ...  

Egal ob ich nun mit zB page_is_redirect oder p.page_is_redirect oder sogar rc.page_is_redirect fortfahre.

Generell kann und will ich die Tabellenstruktur nicht ändern. Es handelt sich um ein Wiki mit bereits 17.000 Artikeln.
Die Präfixe sind doch in Ordnung? Die Mediawiki Jungs haben sich sicher was dabei gedacht. title, user etc tauchen in vielen der knapp 50 Tabellen auf :) Zur Identifizierung also ganz hilfreich.

Du hast mich nicht verstanden. Speichere das Datum lieber in einer Spalte vom Datentyp DATE ab und selektiere nach dieser Datumsspalte.

Du meinst mit Datum doch mein ~~~sql WHERE ... AND
(t1.page_title LIKE '%".$thismonth."%' OR t1.page_title LIKE '%".$lastmonth."%')

Das macht schon Sinn. Dass alle Titel mit YYYY-MM-DD anfangen hat aber mit der Query hier nichts zu tun. Stell dir vor die Titel lauten alle in der Art "2009-01-17 - Rolling Stones live in Hamburg". Diese Datumsangabe am Anfang ist keine solche. Sie hat mit dem rc\_timestamp (letztes Änderungsdatum) oder der rc\_id (ID der jeweiligen Änderung) nichts zu tun.  
Die Anfrage dient einer Liste der letzten 50 ($this->limit) Artikel (aus Tabelle page) deren Inhalt immer (auch in Zukunft) aus den letzten 2 Monaten stammt (YYYY-MM-DD am Anfang), was das "Titel like lastmonth (z.Z. = 2009-01) or thismonth (z.Z. = 2009-02)" gewährleistet und neue Artikel, die sich zB um 1999 drehen, ausfiltert.  
  
Was ist mit nachfolgender Variation? Sie ergibt zwar keine Syntax fehler, beinhaltet aber noch immer die title-Doppelungen aus recentchanges.  
~~~sql
  
SELECT  
    t1.page_namespace,  
    t1.page_title,  
    t1.page_is_redirect,  
    t2.rc_timestamp,  
    t2.rc_user,  
    t2.rc_user_text  
FROM page AS t1 INNER JOIN recentchanges AS t2  
    ON t1.page_title = t2.rc_title  
       AND t2.rc_id IN (  
        SELECT mySub.id FROM  
        (  
            SELECT  
                rc_timestamp, rc_title, rc_user, rc_user_text, MIN(rc_id) AS id  
            FROM  
                recentchanges AS t3  
            GROUP BY  
                rc_timestamp, rc_title, rc_user, rc_user_text  
        ) AS mySub  
    )