Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfrage aus zwei Tabellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mfeske, 24 Oktober 2013.

  1. mfeske

    mfeske Benutzer

    Hallo zusammen,

    ich hoffe als Newbi nicht eine allzu dumme Frage zu stellen, habe aber mit Tante Google keine brauchbaren Ergebnisse erhalten.

    Ich habe eine Datenbank aus der ich auch erfolgreich Daten abfragen kann und in das PHP Script einbaue.
    PHP:
    include('db.inc.php');
    $id_job $_GET['id_job'];
    $SQLUser="select * from job where id_job='$id_job'";
    $resultID=mysql_query($SQLUser);
    $ID=mysql_fetch_object($resultID);
    In der Tabelle job ist ein Feld user_job. In diesem steht ein Vorname und Nachname, getrennt durch ein Leerzeichen.
    In der Tabelle user gibt es die Felder titel_user, firstname_user und lastname_user.

    Wie müsste den jetzt eine Abfrage aussehen, die in der Tabelle Job ermittelt welcher user_job dort steht und mir in meinem Script dazu titel_user und lastname_user ausgibt?

    Gruß
    Micha
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Beschäftige Dich mit Normalisierung. In Deiner User-Tabelle speicherst Du eine eindeutige ID als Primary Key und den Rest, in der anderen Table die user_id als Foreign Key auf die user-Tabelle.

    Gewöhn Dir ab, 2 Dinge Komma-getrennt in einem Feld zu speichern, und beschäftige Dich mit JOIN's.

    Falls es noch nicht zu spät ist, steige auf PostgreSQL um ;-)
     
  3. mfeske

    mfeske Benutzer

    Hallo akretschmer,

    Danke für die Tips. Da ist doch aber nichts Komma-getrennt ?! Vorname und Nachname stehen durch ein Leerzeichen getrennt in einem Feld. In der user habe ich eine id_user mit AUTO_INCREMENT. Gibt es keine Möglichkeit ohne Umstieg auf PostgreSQL zum Ziel zu kommen?

    Gruß
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Dann eben per Leerzeichen. Was ist mit "Hans Peter Günter Meier"?

    Sicher. Aber ich hab keine Lust, Dir falsches SQL beizubringen. Normalisiere das, dann sehen wir weiter.
     
  5. akretschmer

    akretschmer Datenbank-Guru


    Auch wenn es falsch ist, weil das Design falsch ist:

    Code:
    test=*# select * from job ;
    id |    user_job
    ----+----------------
      1 | max mustermann
      2 | susi sorglos
    (2 rows)
    
    Time: 0,167 ms
    test=*# select * from usr ;
    titel |  vn  |    nn
    -------+------+------------
    herr  | max  | mustermann
    frau  | susi | sorglos
    (2 rows)
    
    Time: 0,171 ms
    test=*# select id, user_job, titel, vn, nn from usr left join job on (usr.vn || ' ' || usr.nn = job.user_job);
    id |    user_job    | titel |  vn  |    nn
    ----+----------------+-------+------+------------
      1 | max mustermann | herr  | max  | mustermann
      2 | susi sorglos  | frau  | susi | sorglos
    (2 rows)
    
     
  6. mfeske

    mfeske Benutzer

    Hallo akretschmer,

    ich habe jetzt noch einen anderen Ansatz und hoffe ich mache es damit nicht schlimmer. Ich hole mir ja die Information welcher User es ist aus der usr und schreibe es in die user_job, später benötige ich ja die Info aus der usr welcher Vorname etc.. In der usr ist dem User ja auch eine ID zugeordnet. Macht es vielleicht mehr Sinn diese ID mit in die user_job zu schreiben und hinterher für die "Rückabwicklung" zu nutzen?

    Gruß
    Micha
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Genau. In der usr die ID als primary Key, in der usr_job als Foreign Key. Das in einer Engine, die das unterstützt, also NICHT MyISAM.
     
  8. mfeske

    mfeske Benutzer

    Auweia, völlig den Überblick verloren und stehe auf dem Schlauch :-(
    Ich übergebe mit einem Post die ID vom Job. ich weiss also in welcher Zeile der Tabelle Job ich stehe. Dort ist in der Spalte die iduser_job vermerkt, welche zur Tabelle user und dem Feld id_user passt. Ich benötiger jetzt von dort die Felder titel_user, firstname_user und lastname_user sowie mail_user.
    $iduser_job="$ID->iduser_job"; ist schon mal die ID die ich aus dem Array auslese.

    Wie müsste die Abrage jetzt in PHP aussehen?

    Gruß
    Micha
     
    Zuletzt bearbeitet: 28 Oktober 2013
  9. akretschmer

    akretschmer Datenbank-Guru


    PHP? Abfrage?

    Die Abfrage erstellst Du in SQL, nicht PHP.

    Code:
    test=*> create table usr(id int primary key, name text);
    CREATE TABLE
    test=*> create table jobs (id int primary key, usr int references usr, job text);
    CREATE TABLE
    test=*> insert into usr values (3,'max mustermann');
    INSERT 0 1
    test=*> insert into jobs values (1,3,'mein job');
    INSERT 0 1
    test=*> select u.name, j.jobs from usr u left join jobs j on u.id=j.usr;
    ERROR:  column j.jobs does not exist
    LINE 1: select u.name, j.jobs from usr u left join jobs j on u.id=j....
      ^
    test=*> select u.name, j.job from usr u left join jobs j on u.id=j.usr;
      name  |  job
    ----------------+----------
     max mustermann | mein job
    (1 row)
    
    
    Andreas
     
  10. mfeske

    mfeske Benutzer

    Okay ich bin am Ziel, beim auslesen des Users wird die ID mit ausgelesen und in die andere Tabelle mit reingeschrieben. Bei der Abfrage der Tabelle habe ich diese dann gleich zur Hand. Danke für die Unterstützung.
    Gruß
    Micha
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden