db Abfrage mit mehreren ids im WHERE

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • db Abfrage mit mehreren ids im WHERE

    Bei diesem Skript komme ich einfach nicht weiter!

    Als erstes wird die Datenbank nach 10 zutreffenden ids befragt.
    Dieses Ergebnis wird in das PHP array $zehnids gesteckt.

    Das Problem:
    Im Zweiten Schritt wird dieselbe Tabelle nach weiteren Spalten unter Benutzung der $zehnids-Werte abgefragt.

    Doch die Zweite Abfrage bringt die Fehlermeldung:

    Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous in G:


    Wo ist der Fehler? Oder lässt sich die ganze Abfrage-Technik besser machen?


    Der Grund, warum ich dieses Konstrukt verwende, ist:
    die spalte8 wird am Ende des Skripts (schritt3) hochgezählt, also geändert - wodurch bei der nächsten Abfrage andere
    ids als result gezogen werden. Darum ist es wichtig, immer mit den gleichen ids zu fragen.

    der Problem-Code:

    PHP Code:
    <html>
    <head>
    <?php
    echo ("<script type="text/JavaScript">");
    $pdo = new PDO('mysql:host=localhost;dbname=db1''ichselbst''abc');
    // schritt 1: Javascript-array und php-array $zehnids füllen
    $stmt $pdo->prepare("SELECT `id`, `ar`, `ra` FROM tabelle1 WHERE `kategorie`= ? ORDER BY `gez` ASC LIMIT 10");
    $stmt->execute(array('meinekategorie'));
    $zehnids = array();
    $gespkt 0;
    while(
    $row $stmt->fetch())
    {
    $zehnids[] = $row['id']; // 10 zutreffende ids in PHP-array $zehnids speichern
    echo ("ans[" $row["id"] . "] = "" . $row["ar"] . ""; ");
    echo (
    "pu[" $row["id"] . "] = " $row["ra"] . "; ");
    $gespkt = ($gespkt $row["ra"]); // mögliche Gesamtpunktzahl erzählen
    }
    echo (
    "</script>\n");
    ?>
    </head>
    <body>

    <?php
    // schritt 2: weitere spalten mit den selben $zehnids holen
    foreach ($zehnids as $einzid)
    {
    echo (
    "<hr>");
    $stmt $pdo->prepare("SELECT tabelle1.id, tabelle1.frage, ... , tabelle1.gez, tabelle2.look FROM tabelle1, tabelle2 WHERE (tabelle1.autor = tabelle2.user AND `id`= ?) LIMIT 10");
    stmt->execute(array('$einzid')); // Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous in G:\xampp:57 Stack trace: #0

    while($row $stmt->fetch())
    {
    echo (
    "\n<div class="sowas">\n");
    echo(
    "..." $row["frage"]);
    echo(
    "...</div>");
    //schritt 3: die frage als gezogen vermerken = gezogen hochzählen
    $statement $pdo->prepare("UPDATE tabelle1 SET gez = ? WHERE id = ?");
    $statement->execute(array($row["gez"]++, $row));
    }

    }
    ?>

    Last edited by alfonso; 21-09-2025, 10:43.

  • #2
    Moin.

    Wie die Fehlermeldung schon sagt, ist id "ambiguous" -> mehrdeutig. Weil "id" in tabelle1 und tabelle2 vorkommt.
    Im where einfach id durch tabelle1.id oder tabelle2.id ersetzen, je nachdem was Sinn ergibt (Hab mir den Code jetzt nicht so genau angesehen)

    Lg

    Comment


    • #3
      soso. Konnte ambiguous nicht so richtig verstehen. Jetzt bin ich schlauer. Danke.

      Comment

      Working...
      X