[php / mysql]

vquicksilver

Mitglied
Ich habe eine Liste mit Usern in einer Tabelle. Dann habe ich eine Terminliste in einer 2. Tabelle. Und in der 3. Sind die beiden dinge miteinander verknüpft. Hier ersteinmal die struktur:
Code:
User:
id gid admin active name         email            password
1  1   1         1        quicksilver  me@me.de   bla
2  1   0         1        du              bla@bla.de   bla
3  1   0         1        er               er@er.de      er

User_termin:
tid uid
1   1
1   2
1   3
2   1
2   2
3   3

Termine:
id date             active min
1  2006-01-13  1        0
2  2006-01-18  1        0
3  2006-01-19  1        0

So nun zu meinem Problem.. ich selektiere mit folgendem query alle user die bei dem termin eingetragen sind:
Code:
$ergebnis=mysql_query("SELECT u.id, u.gid, u.admin, u.active, u.name, u.email, u.password FROM user u, user_termin ut, termine t WHERE ut.uid = u.id AND ut.tid = t.id AND t.id = '".$_GET['tid']."'");

Soo nun habe ich alle user gelistet die sich bei dem Termin eingetragen haben.. Nun möchte ich aber ein drop down feld in dem NUR die User gelistet sind die noch NICHT in dem Termin eingetragen sind.. wie muss ich das machen? Weil ich habe im moment leider nur eine normale liste mit allen usern:

PHP:
$query = "SELECT id,name FROM $user_table";
$result = mysql_query($query) or die (mysql_error());

$content .="<CENTER>
<FORM ENCTYPE=\"multipart/form-data\" ACTION=\"?tid=".$_GET["tid"]."\" METHOD=\"POST\" name=\"user\" onSubmit=\"return validate(this)\">
<input type=\"hidden\" name=\"action\" value=\"send\">
<input type=\"hidden\" name=\"tid\" value=\"".$_GET["tid"]."\">";
$content .="<select name=uid class=\"button\"><option>User hinzufügen</option>\n";

while ($array=mysql_fetch_array($result)) {

 $content .="<option value=\"$array[id]\">". $array['name'] ."</option>";
}

$content .="</select>";

Vielen Dank für eure Hilfe.
 
Eigentlich ist deine Frage ja zu 100% MySQL-bezogen und hat mit PHP herzlich wenig zu tun, aber nun gut...
Eine Möglichkeit, die User herauszufinden, welche noch keinen Termin belegt haben, wäre folgende:
Du benutzt in deinem Query einen "LEFT JOIN": Zuerst selektierst du deine Usertabelle, fügst über "LEFT JOIN" die Termintabelle zum Ergebnis hinzu und fragst in der WHERE-Bedingung ab, ob eine Spalte der Termintabelle = NULL ist (z.B. ISNULL(ut.id) ).

Bei einem "LEFT JOIN" ist die Tabelle LINKS des Operators immer im Ergebnis enthalten, aber die rechte nur wenn eine tatsächliche Verknüpfung besteht (bei dir zwischen User.id und User_termin.uid). Ansonsten enthalten die Spalten den wert NULL.

Dein Query müsste also ungefähr so aussehen:
Code:
SELECT 
  u.id 
FROM User u LEFT JOIN User_termin ut 
ON u.id=ut.uid 
WHERE ISNULL(ut.id);
 
Hier ein Beispiel mit left join:
Code:
select
  User.id,
  User.name
  # ggf. weitere Felder
from User
left join User_termin
on User.id=User_termin.uid
  and User_termin.tid=[gesuchteTerminID]
where User_termin.tid is null
Gruß hpvw

EDIT: Da war mal wieder einer schneller. Ceppis Query findet User, die bei keinem Termin eingetragen sind, das von mir gepostete findet User, die bei einem bestimmten Termin nicht eingetragen sind.
 
Zurück