Sagt mir mal, dass das nicht geht bitte

Tim C.

Erfahrenes Mitglied
Sevus ich stehe hier grade vor einem Problem und gehe davon aus, dass es mit meinen momentan vorhandenen Tabellen in der MySQL DB so nicht funktionieren kann, da ich in MySQL bisher noch keine explode() ähnliche Funktion gefunden habe.

Also folgende Situation:
- Zwei Tabelle (mitarbeiter und projektbereiche)
- In der Tabelle projektbereiche gibt es eine Spalte leader_id, in der die ID des leitenden Mitarbeiters gespeichert wird. Der Haken an der Sache: Dies können auch mehrere Mitarbeiter sein, dann werden die ID's durch | getrennt. Ein Beispieleintrag könnte also sein 3|6|14
- Es sollen alle Daten aus der mitarbeiter Tabelle geholt werden, wo die ID eine der in mitarbeiter.leader_id gespeicherten ist.


Sollte nicht gehen oder ? Da MySQL die | nicht umsetzen kann, oder täusche ich mich da jetzt ?

Wenns nicht geht sagts ruhig, ich hab halt meine Sachen hier dumm angelegt und nicht weit genug im Vorraus geplant. Aber ich dachte evtl. hat doch noch jemand eine Idee und ich kann mir den Gang nach Canossa ersparen :rolleyes:

mfG
Tim
 
Wenn MySQL Subselect könnte, dann könnte man dran drehen aber so : Nee :-(

Die Abfage in zwei Stufen machen:

PHP:
$erg = mysql_query("select  replace(leader_id,"|",",") from projektbereiche where .......",$sqllink);
$row = mysql_fetch_row($erg);
$erg = mysql_query("select * from mitarbeiter where  leader_id in (".$row[0].")",$sqllink);
 
Da wir uns in PHP befinden, würde ich das ganze einfach exploden, also sowas in der art:

PHP:
//...mysql abfragen blabla

//Die IDs der Projektleiter sind in $result['leiter'] gespeichert.
$lid = explode("|",$result['leiter']);
$anz_lid = count($lid);
echo "$anz_lid Personen leiten dieses Projekt.<p>Die Namen:";
for($i;$i<$anz_lid;$i++)
{
 $name  = mysql_fetch_row(mysql_query("select name from Mitarbeiter where ID={$lid[$i]}'"));
 echo "$name[0].<br>";
}

Sollte so klappen...

Der Code ist frei Hand geschrieben und hat keinen Anspruch auf Richtigkeit!


[edit]
Ich habe mir nochmal deine Frage angeschaut und nuja, eigentlich denke ich,dass du einfach mysql die Funktion des Datenspeichers geben solltest und die Bearbeitung auf PHP erfolgen lassen solltest, wie du es in deinem Post eigentlich schon sagst.
Wenn die Datenbank das Problem hat,dass sie das Zeichen | nicht lesen/speichern kann, aus welchem Grund auch immer, kannst du ja auf ein anderes Trennzeichen,welches nicht zwangsläufig aus einem Zeichen bestehen muss, zurückgreifen.
[/edit]
 
Zuletzt bearbeitet:
Wenn die Datenbank das Problem hat,dass sie das Zeichen | nicht lesen/speichern kann, aus welchem Grund auch immer, kannst du ja auf ein anderes Trennzeichen,welches nicht zwangsläufig aus einem Zeichen bestehen muss, zurückgreifen.
Klar kann der das speichern. Was ich meinte war, dass MySQL keine interne explode Funktion hat. Eine integrierte Substring Funktion z.B. gibt es ja. Das war der Ansatzpunkt ;)
Naja werde mir das ganze morgen früh auffer Arbeit nochmal zu Gemüte führen.
 
Ich glaubs echt nicht.

Jetzt sitz ich hier wieder vor meinem Code, aber glaubt ihr mir würde noch einfallen, wozu ich das brauchen wollte ?

Man man man. Ich muss echt anfangen strukturierter zu arbeiten oder nochmehr PostIts und ToDo Listen an die Wand zu nageln.
 
Leuchte hier sollte deine Datenbank Struktur mehr normalisiert werden.

Tabelle projekte
p_id
andere
Spalten

Tabelle Leader
l_id,
name,
email
...

Tabelle projekt_leader
p_id,l_id


so kannst du du alle Leader mit
select l_id from projekt leader where p_id = ".$projekt_id

herausziehen. Oder gleich
select Leader.name,Leader.email,projekte.andere from Leader, projekte, projekt_leader where leader.l_id = projekte_leader.l_id and projekte.p_id = ".$projektid

<- So oder so ähnlich, bin nicht gerade ein SQL Junky :)
 
Zurück