SQL Eine Spalte doppelt abfragen

Miles86

Ensign
Registriert
Nov. 2009
Beiträge
237
Hallo zusammen,

ich möchte eine Abfrage schreiben, welche eine Spalte doppelt abfragt.

Die Spalten in der Tabelle sind: id, name, id_chef

Ich möchte jetzt den Namen des Mitarbeiters und den Namen des zugehörigen Chefs (über id_Chef definiert) ausgeben. Wie mache ich das?

mfG
 
Mit einem Join.


PHP:
$chef_id = POST oder GET oder DB wie auch immer.
//Wenn alle ausgegeben werden, einfach WHERE raus und ne schleife rein bei der Ausgabe!
$ausgabe = mysql_query("SELECT `mitarbeiter`.`x`, `chef`.`name` FROM `mitarbeiter` LEFT JOIN `chef` ON `mitarbeiter`.`chef_id` = `chef`.`chef_id` WHERE (`mitarbeiter`.`chef_id` = $chef_id) 
ORDER BY `mitarbeiter`.`chef_id` DESC") or die(mysql_error());
$row = mysql_fetch_array($ausgabe);

$bla = $row["bla"];
$bla2 = $row["bla2"];
//beispiel.
echo 'Der Mitarbeiter '.$bla.' ist dem Chef '.$bla2.' zugeteilt.';
 
Wenn es die gleiche Tabelle ist, nen Alias vergeben.
 
Mh,
ich habe nur eine Tabelle, in der sowohl die Chefs, als auch die Mitarbeiter enthalten sind.
Hier mal ein Beispiel:

ID name id_chef
10 peter 15
11 oliver 15
15 klaus 0

Beim entsprechenden SELECT was ich suche soll unter'm Strich folgendes rauskommen
name name_chef
peter klaus
oliver klaus
klaus

Edit: Wie funktioniert das Enigma?

Aber vielen Dank schonmal für deine Mühe :-)
 
PHP:
SELECT mitarbeiter.id, mitarbeiter.name_id, mitarbeiter.id_chef, chef.name_chef, chef.chef_id FROM mitarbeiter LEFT JOIN chef ON `mitarbeiter`.`id_chef` = `chef`.`chef_id` WHERE mitarbeiter.id_chef = 15

Bei dieser DB:

HTML:
--
-- Tabellenstruktur für Tabelle `chef`
--

CREATE TABLE IF NOT EXISTS `chef` (
  `chef_id` int(22) NOT NULL,
  `name_chef` varchar(50) NOT NULL,
  PRIMARY KEY  (`chef_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `chef`
--

INSERT INTO `chef` (`chef_id`, `name_chef`) VALUES
(15, 'Klaus');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `mitarbeiter`
--

CREATE TABLE IF NOT EXISTS `mitarbeiter` (
  `id` int(22) NOT NULL,
  `name_id` varchar(50) NOT NULL,
  `id_chef` int(22) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `mitarbeiter`
--

INSERT INTO `mitarbeiter` (`id`, `name_id`, `id_chef`) VALUES
(1, 'Peter', 15);
 

Anhänge

  • sql.png
    sql.png
    17,2 KB · Aufrufe: 216
Ich hab aber nur eine Tabelle in der alle Mitarbeiter UND Chefs stehen
 
Inner join:
Code:
SELECT
 mitarbeiter.name
 chef.name
FROM
 mitarbeiter,
 mitarbeiter chef
WHERE
 mitarbeiter.chef_id = chef.id

oder wenn der chef optional (NULL) ist, mit einem left join:
Code:
SELECT
 mitarbeiter.name
 chef.name
FROM
 mitarbeiter
 LEFT JOIN mitarbeiter chef ON mitarbeiter.chef_id = chef.id
 
Zurück
Oben