[SQL] Mehrsprachige Inhalte aus Datenbank auslesen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Murdoc, 8. August 2010 .

  1. 8. August 2010
    Mehrsprachige Inhalte aus Datenbank auslesen

    moin. ich hab derzeit ein problem mit einem query. es handelt sich um ein script, welches inhalte (news) aus einer db auslesen soll. das problem: diese inhalte sollen übersetzen werden können.

    d.h. der query muss folgendes ergebnis liefern:
    jeden eintrag in der benutzersprache und falls nicht vorhanden originaleintrag.

    folgendes hab ich versucht:
    Code:
    SELECT
     SQL_CALC_FOUND_ROWS
     n.`id` newsID, n.`title`, n.`content`,
     n.`datetime`, n.`userID`, u.`name` userName
    FROM `news` n
    LEFT JOIN `users` u ON ( n.`userID` = u.`id` )
    WHERE 
     n.`id` IN (
     ( SELECT n2.`id`
     FROM `news` n2
     WHERE
     n2.`langID` = {LANG_ID} -- <- die benutzersprache
     && n2.`translateID` != 0
     )
     ) 
     || n.`translateID` = 0 -- <- da sitzt der fehler (denk ich)
    ORDER BY n.`datetime` DESC, n.`id` DESC
    LIMIT 0, 30
    aber leider liefert der query jetzt alle einträge + übersetzung (falls vorhanden)
    jemand ne idee das komfortabel mit einem query zu lösen?

    zur struktur:
    - news.langID = die sprach-id (sollte klar sein)
    - news.translateID = die id des original-eintrags. 0 wenn der eintrag ein original ist, !0 wenn es eine übersetzung ist.

    ----
    ich denk das ganze wird ein wenig aufwendiger als ich dachte, die sortierung stimmt ja auch nicht mehr.

    klar könnte ich einfach alle originalen fetchen und dann jeweils prüfen ob ne übersetzung vorhanden ist, aber das sind mir zu viele querys.

    ich grübel noch ein wenig ^^

    ps: berwertungen gehen an jeden hilfreichen beitrag raus (falls das jemanden ans t)

    ----

    habs nun so gelöst:

    zuerst hol ich alle originalen news (ORDER stimmt wieder) und speicher die ids in ein array.
    anschließend hol ich mit einem zweiten query alle passenden übersetzungen und überschreib den originalen inhalt.

    funzt einwandfrei mit nur 2 querys

    ich lass mal offen falls jemand eine bessere lösung kennt.
     
  2. 10. August 2010
    AW: Mehrsprachige Inhalte aus Datenbank auslesen

    Code:
    SELECT
     news.id,
     IF(n2.title=NULL,news.title,n2.title) AS title,
     IF(n2.content=NULL,news.content,n2.content) AS content,
     news.datetime,
     news.userID,
     users.name AS userName
    FROM news
    LEFT JOIN users ON (users.id = news.userID)
    LEFT JOIN news AS n2 ON (n2.translateID=news.id AND n2.langID={LANG_ID}) -- <- die benutzersprache
    WHERE news.translateID=0
    ORDER BY
     news.datetime DESC,
     news.id DESC
    Ich kann dir allerdings nicht sagen, welche der Lösungen performanter ist
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.