thealex
Goto Top

PhP-Funktion zum Abrufen von Daten aus 2 Mysql-Tabellen

Halli Hallo Hallöle,

Ich habe 2 MySQL-Tabellen, eine in der die user abgelegt sind. Aus dieser möchte ich lediglich den Usernamen abrufen, um mit diesem dann aus einer 2 Tabelle andere werte abzurufen.

Allerdings bin ich mir nicht sicher wie ich dies am einfachsten lösen kann.


Mein bisheriger Code:

<?php

require_once('db_config.php');  

class USERLIST
{	

	private $conn;
	
	public function __construct()
	{
		$database = new Database();
		$db = $database->dbConnection();
		$this->conn = $db;
    }
	
	public function runQuery($sql)
	{
		$stmt = $this->conn->prepare($sql);
		return $stmt;
	}
	
	
	public function getUsernames()
	{
		try
		{
			$stmt = $this->conn->prepare("SELECT user_name FROM users");  
			$stmt->execute();
			$userList=$stmt->fetchAll();
			
				
			
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();
		}
	}
	
}
?>
Danke für jede Mithilfe

Content-Key: 364624

Url: https://administrator.de/contentid/364624

Printed on: April 18, 2024 at 00:04 o'clock

Member: wiesi200
wiesi200 Feb 13, 2018 at 15:31:33 (UTC)
Goto Top
Hallo,

sowas macht kein Mensch in der form. Sorry
Dafür gibt es innerhalb der Datenbank "JOIN".

Geht viel schneller und einfacher.
Member: TheAlex
TheAlex Feb 14, 2018 updated at 12:33:45 (UTC)
Goto Top
danke für den tipp weisi, das ergebnis der funktion soll sein das am ende eine tabelle erzeugt werden soll die in der ersten spalte die nutzernamen ausgibt, und dahinter dann zwei spalten mit den wünschen der user(dienst bzw dienstfrei). wie genau müsste ich dann mit dem Join arbeiten?

Für die ausgabe benötige ich dann ein array das alle daten des Users enthällt.

Danke für eure mithilfe^^

//edit

Bis jetzt habe ich es so:

	public function getUserDienst($mnum)
	{
		try
		{
						$stmt = $this->conn->prepare("SELECT mitarbeiter, cal_day FROM ma_wishes, users WHERE mitarbeiter=user_name AND cal_mon=:mnum AND ma_wish='Dienst' ORDER BY user_id");  
			$stmt->bindparam(":mnum", $mnum);  
			$stmt->execute();
			$list=$stmt->fetchall();
			
			print_r ($list);	
			
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();
		}
	}

Allerdings bin ich gerade am überlegen wie ich den Usernamen als Index bekomme. Die Tabelle sollte am ende so aussehen:

Mitarbeiter | Dienst | Dienstfrei | Anzahl der Dienste |

Die ausgabe ist derzeit folgendermaßen:

Array
(
     => Array
        (
            [user_name] => testuser
             => testuser
            [cal_day] => 12
            [1] => 12
        )

    [1] => Array
        (
            [user_name] => testuser
             => testuser
            [cal_day] => 20
            [1] => 20
        )

    [2] => Array
        (
            [user_name] => Administrator
             => Administrator
            [cal_day] => 01
            [1] => 01
        )

    [3] => Array
        (
            [user_name] => Administrator
             => Administrator
            [cal_day] => 24
            [1] => 24
        )

    [4] => Array
        (
            [user_name] => Administrator
             => Administrator
            [cal_day] => 4
            [1] => 4
        )

)

Wie bekomme ich jetzt alle cal_day in ein array zu dem Nutzer? Könnte mir eventuell array_merge helfen?
Member: ganymed
ganymed Feb 15, 2018 at 14:58:18 (UTC)
Goto Top
Ich glaube den Problem liegt im Verständnis von Relationalen Datenbanken und deren Abfrage.
Voraussetzung ist, dass deine Tabellen verknüpft werden können.

Deine Tabelle users muss mindestens folgende Spalten haben.
ID -> eindeutige einzigartige Zahl (Primärschlüssel)
mitarbeiter -> Name des Mitarbeiters

Deine Tabelle ma_wishes muss folgendermaßen aussehen
ID -> eindeutige einzigartige Zahl (Primärschlüssel)
MID -> ID des Mitarbeiters mit dem dieser Datensatz verknüpft ist (Fremdschlüssel)
cal_day ->Der Wert den du haben möchtest

In deiner SQL Abfrage werden die Tabellen dann verknüpft und das sieht dann so aus
SELECT users.mitarbeiter, ma_wishes.cal_day FROM users, ma_wishes WHERE users.ID = ma_wishes.MID AND ...{Deine Weiteren Einschänkungen}...;

Dabei ist users.ID = ma_wishes.MID die Verknüpfung der Tabellen.
Für Einsteiger ist das einfacher zu verstehen. Die Sache mit dem [INNER] JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN solltest du dir dann aber auch aneignen.

Gruß ganymed
Member: TheAlex
TheAlex Feb 15, 2018 at 19:52:08 (UTC)
Goto Top
soweit schonmal danke, dann werde ich wohl das mit dem Fremdschlüssel mal in angriff nehmen! deine erklärung ist gut und verständlich. Danke dafür.

Bin einfach zu lange aus PHP raus als das ich mich noch so gut daran erinnern könnte! Da ich leider (sieht nicht jeder so) eher der Mensch bin der alles im Praktischem lernt anstatt stunden lang texte zu lesen die nur so vor Fachausdrücken und komplizoerten erklärungen strotzen

Sobald ich das gestestet habe, und es mir das Ergebnis liefert das ich brauche markiere ich deinen Beitrag auch mit dem Button "Zur Lösung beigetragen" als dankeschön
Member: TheAlex
TheAlex Feb 15, 2018, updated at Feb 17, 2018 at 17:00:49 (UTC)
Goto Top
Ich bekomme jetzt folgende ausgabe:

Array
(
     => Array
        (
            [mitarbeiter] => Administrator
             => Administrator
            [cal_day] => 01
            [1] => 01
            [ma_wish] => Dienst
            [2] => Dienst
        )

    [1] => Array
        (
            [mitarbeiter] => Administrator
             => Administrator
            [cal_day] => 04
            [1] => 04
            [ma_wish] => Dienst
            [2] => Dienst
        )

    [2] => Array
        (
            [mitarbeiter] => Administrator
             => Administrator
            [cal_day] => 24
            [1] => 24
            [ma_wish] => Dienst
            [2] => Dienst
        )

    [3] => Array
        (
            [mitarbeiter] => testuser
             => testuser
            [cal_day] => 3
            [1] => 3
            [ma_wish] => Frei
            [2] => Frei
        )

    [4] => Array
        (
            [mitarbeiter] => Administrator
             => Administrator
            [cal_day] => 9
            [1] => 9
            [ma_wish] => Frei
            [2] => Frei
        )

)

Wie bekomme ich jetzt die werte der User zusammen wenn der dienstwunsch identisch ist? So das ich am ende ein array habe?
Quasi :
Array
(
     => Array
        (
            [mitarbeiter] => Administrator
            [dienst] => 9, 12, 15
            [frei] => 13, 19,  23
        )
    [1] => Array
        (
            [mitarbeiter] => testuser
            [dienst] => 12, 19, 25
            [frei] => 13, 20,  23
        )
)

Den Query habe ich jetzt folgendermaßen:
$stmt = $this->conn->prepare("SELECT ma_wishes.mitarbeiter, ma_wishes.cal_day, ma_wishes.ma_wish FROM users, ma_wishes WHERE users.user_id = ma_wishes.mid AND ma_wishes.cal_mon=:mnum ORDER BY ma_wishes.cal_day ASC");  

habe jetzt noch folgendes getestet:
			$test = array_column($list, 3);

Jedoch macht er jetzt ja keinen Unterschied welcher User es ist. wie kann ich hier unterscheiden lassen?
Member: TheAlex
TheAlex Feb 18, 2018, updated at Feb 19, 2018 at 00:06:27 (UTC)
Goto Top
Um es vllt zu vereinfachen mal ein bild der DB:
database

Ich benötige eine möglichkeit mit der es möglich ist folgende Ausgabe zu erzeugen:

Mitarbeiter |   Dienst    | Frei     |  Anzahl D/F |
 $user   |  $Dienst  |  $Frei  |    $d/$f         |

Quasi eine Tabelle, nur wie bin ich mir nicht ganz sicher?


Für jede hilfe bin ich dankbar!

Habe den Query nun hierrauf angepasst:
SELECT mitarbeiter, cal_day, ma_wish FROM ma_wishes WHERE cal_mon=:mnum GROUP BY mitarbeiter ORDER BY cal_day +0 ASC
Jedoch gibt er mir nun nurnoch das erste ergebnis aus, das problem ist aber das ich ja alle werte zu dem nutzer benötige!