tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
1026
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    Hallo, ich arbeite gerade an einem Datenbankdesign und stehe vor einem Problem.

    Ich möchte folgende Verbindungstabelle kreieren:

    patch:
    patchid | refid | tabid
    1 | 1 | 2
    2 | 2 | 2
    Alle 3 Spalten zusammen ergeben den Primärschlüssel.

    Tabellen:
    tabid | name
    1 | telefon (ist ein Tabellenname)
    2 | pc (ist ein Tabellenname)

    pc:
    id | name
    1 | Hans
    2 | Werner

    Möchte jetzt aus der ersten Tabelle "patch" die ID auslesen um aus der Tabelle "Tabellen" den Namen der Tabelle zu erhalten. Ist ja kein Problem!
    Code sql:
    1
    
    SELECT name FROM tabellen WHERE ID =(SELECT tabid FROM patch WHERE pachtid = 1)
    Die Tabelle heißt also pc.

    Aus Tabelle pc möchte ich nun anhand der refid aus Tabelle "patch" den Namen aus Tab. pc erhalten.

    Code sql:
    1
    2
    3
    4
    
    SELECT name
    FROM 
        (SELECT name FROM tabellen WHERE ID =(SELECT tabid FROM patch WHERE pachtid = 1)) AS tmp
    WHERE ID =(SELECT refid FROM pacht WHERE pachtid = 1)

    Bekomme nur den Fehler: #1054 - Unknown column 'name' in 'field list'

    Ich hoffe jemand versteht meinen Ansatz und kann mir einen Rat geben, wie man dieses Problem lösen kann.
    Geändert von Steusi (09.09.10 um 14:27 Uhr)
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Geht mWn nur mit zusammensetzen...
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    --Den Tabellennamen @tab und die ReferenzId @refid setzen
    SELECT 
        @tab:=t.name,
        @refid := p.refid 
    FROM 
        tabellen AS t
        INNER JOIN patch AS p
            ON t.ID = p.tabid
    WHERE
        p.patchid = 1;
    --SQL-Statement mit @tab als Tabellennemane zusammensetzen    
    SET @SQL = CONCAT('SELECT * FROM ', @tab, ' WHERE id = ?');
    --SQL-Statement für die Ausführung vorbereiten
    PREPARE stmt FROM @SQL;
    --SQL-Statement mit der @refid ausführen
    EXECUTE stmt USING @refid;
    Geändert von Yaslaw (09.09.10 um 14:36 Uhr)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    Danke yaslaw, hast mir wieder mal Methoden gezeigt, wo ich im Handbuch nach schauen musste.

    Nachdem ich nun verstehe, was du dort machst entdecke ich keinen Fehler, trotzdem erhalte ich keine gewünschte Ausgabe bei PHPMyAdmin, sondern nur die Anzahl der gefundenen Zeilen.

    Einmal auf das wesentliche gekürzt:
    Code sql:
    1
    2
    3
    4
    5
    
    SET @tab := 'tbl_pc';# MySQL lieferte ein leeres Resultat zurück (d.h. NULL Zeilen).
    SET @refid :=1;# MySQL lieferte ein leeres Resultat zurück (d.h. NULL Zeilen).
    SET @SQL = CONCAT( 'SELECT * FROM ', @tab , ' WHERE ID = ', @refid ) ;# MySQL lieferte ein leeres Resultat zurück (d.h. NULL Zeilen).
    PREPARE stmt FROM @SQL ;# MySQL lieferte ein leeres Resultat zurück (d.h. NULL Zeilen).
    EXECUTE stmt;# Zeilen: 1

    Kannst du mir dies erklären? Also ich denke nicht das es im PHP Script später anders sein wird oder?
    Wie gesagt ich bin erst beim Datenbankentwurf, möchte natürlich auch ein Modell entwickeln, welches ich gut abfragen kann.
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ich habe mit HeidiSql Portable geübt und da gibts die Zeile aus.

    Entweder du packst das alles in eine Stored Procedure oder du baust dein Query in PHP zusammen.

    1) Abfrage nach dem Tabellennamen
    2) SQL-String zusammensetzen
    3) Abfragen der Daten

    PHP-Code:
    <?php
    include('connect.php');

    $sql 
    <<<EOT
    SELECT 
        t.name,
        p.refid 
    FROM 
        tabellen AS t
        INNER JOIN patch AS p
            ON t.ID = p.tabid
    WHERE
        p.patchid = 1;
    EOT;

    $result mysql_query($sql);
    $row mysql_fetch_array($result);

    $sql "SELECT * FROM {$row['name']} WHERE id = {$row['refid']}";
    $result mysql_query($sql);
    $row mysql_fetch_array($result);

    var_dump($row);

    ?>
    Geändert von Yaslaw (09.09.10 um 16:27 Uhr)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    Der Weg über PHP ist mir auch bewusst, wollte nur so viel wie Möglich von der DB erledigen lassen. Ich werde es dann noch einmal testen, wenn es so weit ist. Vielen Dank für den Ideenansatz und den fertigen Code!
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

Ähnliche Themen

  1. Prototype Datenbank-Wert in Variable speichern
    Von user2580 im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 12.04.09, 23:18
  2. Antworten: 3
    Letzter Beitrag: 03.10.08, 15:52
  3. Referenz in einer Variable speichern, nicht den Wert
    Von Marius Heil im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 02.08.07, 09:08
  4. Wert in dem global Variable speichern
    Von Pyata im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 11.05.07, 14:52
  5. MYSQL Tabelle mit Wert belegen?
    Von masta im Forum PHP
    Antworten: 2
    Letzter Beitrag: 16.12.02, 16:48