summi: Frage zu komplexer SQL-Abfrage

Hallo Ihr,

sitze gerade an einer etwas komplexeren mysql-abfrage. kann mir vielleicht jemand helfen und sagen wo hier der fehler ist:

( SELECT comment_post_ID As PostID,
comment_author as Auther,
comment_content As Content,
comment_date_gmt As Date,

(SELECT wp_posts.post_title FROM wp_posts LEFT JOIN wp_comments ON wp_posts.ID = wp_comments.comment_post_ID) As title,
'comment' As SelectOrt
FROM wp_comments)
UNION
( SELECT  ID As PostID,
post_author As Auther,
'NULL' As Content,
post_date_gmt As Date,
post_title As title
'post' As SelectOrt
FROM wp_posts)
ORDER BY PostID DESC, Date DESC
LIMIT 3

ich habe zwar schon zwei sachen ausmerzen können aber die abfrage funktioniert mit der unterabfrage so immer noch nicht...

danke für die hilfe im voraus.

gruß,marcus.

--
  1. hallo,

    so auf anhieb ohne die tabellen zu kennen ist das natürlich schwer.
    wie sieht den der mysql fehler aus ?

    cu
    uwi

  2. yo,

    fehlermeldung und datenbank-design wären noch interessant. ein paar sachen auf den ersten blick.

    • die unterabfrage darf nur einen wert zurück geben, damit es funktioniert. versuche doch einfach mal eine aggregat-funktion einzubauen, um zu sehen, ob es dann geht, sprich:

    • (SELECT MAX(wp_posts.post_title) FROM wp_posts LEFT JOIN wp_comments ON wp_posts.ID = wp_comments.comment_post_ID)

    • die anzahl der ausgegeben spalten der UNION abfragen müssen gleich sein. habe nicht nachgezählt, nur als tipp.

    • in der zweiten Union abfrage scheint ein komma zu fehlen, kann aber auch nur ein tippfehler sein:

    post_title As title
    'post' As SelectOrt

    Ilja

    1. Moin,

      • die unterabfrage darf nur einen wert zurück geben, damit es funktioniert.

      problem erkannt, leider aber noch nicht ganz gebannt. logischerweise gibt die subquery mehr als ein ergebnis zurück. meine frage ist jetzt wie ich den titel des post's bekomme welcher aktuelle ausgewählt ist (es handelt sich um die tabellen von WordPress).

      ( SELECT comment_post_ID As PostID,
      comment_author as Auther,
      comment_content As Content,
      comment_date_gmt As Date,

      (SELECT wp_posts.post_title FROM wp_posts LEFT JOIN wp_comments ON wp_posts.ID = wp_comments.comment_post_ID) As title,
      'comment' As SelectOrt
      FROM wp_comments)
      UNION
      ( SELECT  ID As PostID,
      post_author As Auther,
      'NULL' As Content,
      post_date_gmt As Date,
      post_title As title
      'post' As SelectOrt
      FROM wp_posts)
      ORDER BY PostID DESC, Date DESC
      LIMIT 3

      brauchsozusagen für die eindeutige Id den Titel?
      Ideen da?

      tschau

      --
      1. yo,

        also, es macht es immer leichter zu helfen, wenn man weiß, wie das datendesign aussieht und was genau abgefragt werden soll. so muss man schon viel fantasie und eine gute glaskugel besitzen. zum anderen kannst du die zweite Union abfrage weglassen. wenn die erste abfrage korrekt läuft, kann man sie problemlos hinzufügen. für das nächste mal, am besten gleich alles mit angeben....

        meine frage ist jetzt wie ich den titel des post's bekomme welcher aktuelle ausgewählt ist (es handelt sich um die tabellen von WordPress).

        zum einen indem du zur sicherheit eine aggregatfunktion benutzt, bzw. zumindest ein DISTINCT in der unterabfrage. zum anderen durch eine korrelierende unterabfrage, dass heißt ein wert (id) der äußeren abfrage steht in der WHERE klausel der unterabfrage. welcher wert das ist, kann ich so aus dem stehgriff nicht sagen. ausserdem ruft mein bett. wenn du aber dem forum mitteilst, wie dein dein daten-esign aussiehst und was genau die abfrage bewirken soll, bin ich mir sicher, wird dir jemand den entscheidenen tipp geben können.

        Ilja

        1. yo,

          morgenstund hat gold im mund. wie gesagt, ohne dein daten-layout zu kennen und was genau du eigentlich abfragen willst, ist es schwer dir weiterzuhelfen. aber ich wage mal einen schuß ins blaue. versuch mal die unterabfrage so zu gestalten.

          SELECT MAX(wp_posts.post_title) FROM wp_posts WHERE wp_posts.ID = PostID

          wenn das nichts wird, dann musst du eben mit mehr infos rüberkommen oder aber jemand anderes hat eine zündende idee....

          Ilja