Zum Inhalt springen

'pid' in where clause is ambiguous ???

Erstellt am 13. Juni 2005 · 2 Antworten · letzte Antwort am 16. Juni 2005

Tags: Datenbank, Frage

Unicate ·

Hallo!
Ich versuche in dem sql befehl einen Datensatz auzulesen und er gibt mir immer wieder diesen Fehler aus.
Ich weiß, was er bedeutet, habe aber keine Ahnung wie ich das ändere.

Wenn ich die WHERE bedingung lösche funktioniert das einwandfrei, allerdings wird ja der datensatz dann auch nach der "stop"-zeit angezeigt.

wenn jemand ne tolle idee hat, her damit!

sql:

$sql = 
"SELECT
  tx_unicreitlehrgang_lehrgang.uid,
  tx_unicreitlehrgang_lehrgang.lehrgangname, 
  tx_unicreitlehrgang_lehrgang.dauer, 
  tx_unicreitlehrgang_ausbilder.name, 
  tx_unicreitlehrgang_ort.ort, 
  tx_unicreitlehrgang_kosten.kosten, 
  tx_unicreitlehrgang_niveau.niveau
FROM
  tx_unicreitlehrgang_niveau
  INNER JOIN
    (tx_unicreitlehrgang_ort 
    INNER JOIN 
      (tx_unicreitlehrgang_kosten 
      INNER JOIN 
        (tx_unicreitlehrgang_ausbilder
        INNER JOIN tx_unicreitlehrgang_lehrgang 
        ON tx_unicreitlehrgang_ausbilder.uid = 
           tx_unicreitlehrgang_lehrgang.ausbilder) 
      ON tx_unicreitlehrgang_kosten.uid = 
         tx_unicreitlehrgang_lehrgang.kosten) 
    ON tx_unicreitlehrgang_ort.uid = 
       tx_unicreitlehrgang_lehrgang.ort) 
  ON tx_unicreitlehrgang_niveau.uid = 
     tx_unicreitlehrgang_lehrgang.niveau
WHERE
  pid=".$GLOBALS["TSFE"]->id.
  $this->cObj->enableField("tx_unicreitlehrgang_lehrgang")."
GROUP BY
  tx_unicreitlehrgang_lehrgang.uid,
  tx_unicreitlehrgang_lehrgang.lehrgangname, 
  tx_unicreitlehrgang_lehrgang.dauer, 
  tx_unicreitlehrgang_ausbilder.name, 
  tx_unicreitlehrgang_ort.ort, 
  tx_unicreitlehrgang_kosten.kosten, 
  tx_unicreitlehrgang_niveau.niveau";

Wie arbeitet der "enableFields(" befehl? was genau macht er?

Unicate ·

Hab es jetzt so gelöst, das ich die abfrage der pid rauslasse und nur die enableFields abfrage.

das ganze sieht dann ziemlich lustig aus, da enableFields mit einem AND beginnt:

$sql = 
"SELECT
  tx_unicreitlehrgang_lehrgang.uid,
  tx_unicreitlehrgang_lehrgang.lehrgangname, 
  tx_unicreitlehrgang_lehrgang.dauer, 
  tx_unicreitlehrgang_ausbilder.name, 
  tx_unicreitlehrgang_ort.ort, 
  tx_unicreitlehrgang_kosten.kosten, 
  tx_unicreitlehrgang_niveau.niveau
FROM
  tx_unicreitlehrgang_niveau
  INNER JOIN
    (tx_unicreitlehrgang_ort 
    INNER JOIN 
      (tx_unicreitlehrgang_kosten 
      INNER JOIN 
        (tx_unicreitlehrgang_ausbilder
        INNER JOIN tx_unicreitlehrgang_lehrgang 
        ON tx_unicreitlehrgang_ausbilder.uid = 
           tx_unicreitlehrgang_lehrgang.ausbilder) 
      ON tx_unicreitlehrgang_kosten.uid = 
         tx_unicreitlehrgang_lehrgang.kosten) 
    ON tx_unicreitlehrgang_ort.uid = 
       tx_unicreitlehrgang_lehrgang.ort) 
  ON tx_unicreitlehrgang_niveau.uid = 
     tx_unicreitlehrgang_lehrgang.niveau
WHERE
  1=1".
  $this->cObj->enableField("tx_unicreitlehrgang_lehrgang")."
GROUP BY
  tx_unicreitlehrgang_lehrgang.uid,
  tx_unicreitlehrgang_lehrgang.lehrgangname, 
  tx_unicreitlehrgang_lehrgang.dauer, 
  tx_unicreitlehrgang_ausbilder.name, 
  tx_unicreitlehrgang_ort.ort, 
  tx_unicreitlehrgang_kosten.kosten, 
  tx_unicreitlehrgang_niveau.niveau";
KaeptnOvi ·

ambiguous bedeutet ja "mehrdeutig" ich denke es hängt damit zusammen, das du ja mehrere tabellen abfragst, die alle ein PID feld besitzen. Du gibst allerdings in der WHERE clause nicht auf welche tabelle du das PID beziehst, darum der SQL-Fehler