Abfrage aus zwei Tabellen

mfeske

Benutzer
Beiträge
5
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.523
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


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 ;-)
 

mfeske

Benutzer
Beiträge
5
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ß
 

akretschmer

Datenbank-Guru
Beiträge
9.523
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.

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

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ß

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

akretschmer

Datenbank-Guru
Beiträge
9.523
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.


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)
 

mfeske

Benutzer
Beiträge
5
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
 

akretschmer

Datenbank-Guru
Beiträge
9.523
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

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.
 

mfeske

Benutzer
Beiträge
5
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:

akretschmer

Datenbank-Guru
Beiträge
9.523
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


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
 
Werbung:

mfeske

Benutzer
Beiträge
5
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
 
Oben