2 mysqlabfragen vergleichen und differenz ausgeben

thiamak

Grünschnabel
Hallo, mein problem ist: Ich will sehen, wer sich noch nicht angemeldet hat in nem planer.

dazu habe ich 2 mysql abfragen

1te. : "SELECT member_name FROM eqdkp_members WHERE member_rank_id ='1' OR member_rank_id ='2'"

2te.: "SELECT spieler FROM raid_teilnehmer WHERE raid=$id"


die erste abfrage, gibt mir eine liste aus mit allen namen die sich anmelden können,
und die 2te abfrage, gibt mir aus wer sich schon angemeldet hat,

jetzt müsste ich abfrage1 - abfrage2 machen und das ergebnis in reihen ausgeben


kann mir vielleicht wer helfen, wollte das direkt eigentlich mit ner sql abfrage verbinden, kann ich aber nicht da mein mysql bischen zu alt ist :)
 
Ich weiß gar nicht, ob Joins auch bei Nichtübereinstimmungen angewendet werden können, aber probier mal Folgendes:
Code:
SELECT
        `eqdkp_members`.`member_name`,
        `raid_teilnehmer`.`spieler`
  FROM
        `eqdkp_members`
    INNER JOIN
        `spieler` ON ( `eqdkp_members`.`member_name` != `raid_teilnehmer`.`spieler` )
  WHERE
        ( `eqdkp_members`.`member_rank_id` ='1' OR `eqdkp_members`.`member_rank_id` ='2' )
    AND `spieler`.`raid` = $id
 
geht leider auch net, da gibt er mir 700 antworten aus:

vollständige Textfelder
member_name spieler
Arbosch Apax
Arbosch Avalun
Arbosch Ayam
Arbosch Azuki
Arbosch Bandis
Arbosch Bastellix
Arbosch Brembo
Arbosch Brommbart
Arbosch Callahan
Arbosch Chyndonax
Arbosch Cimeter
Arbosch Cirdan
...............................
 
Hallo, mein problem ist: Ich will sehen, wer sich noch nicht angemeldet hat in nem planer.

dazu habe ich 2 mysql abfragen

1te. : "SELECT member_name FROM eqdkp_members WHERE member_rank_id ='1' OR member_rank_id ='2'"

2te.: "SELECT spieler FROM raid_teilnehmer WHERE raid=$id"


die erste abfrage, gibt mir eine liste aus mit allen namen die sich anmelden können,
und die 2te abfrage, gibt mir aus wer sich schon angemeldet hat,

jetzt müsste ich abfrage1 - abfrage2 machen und das ergebnis in reihen ausgeben


kann mir vielleicht wer helfen, wollte das direkt eigentlich mit ner sql abfrage verbinden, kann ich aber nicht da mein mysql bischen zu alt ist :)

Es wäre hilfreich zu wissen, die die Struktur (Primary Keys / Foreign Keys) aussieht. In der Annahme, dass in raid_teilnehmer.spieler die Namen genauso stehen wie in eqdkp_members.member_name frage doch alle Sätze aus eqdkp_members ab, die nicht in der Tabelle raid_teilnehmer mit der entsprechenden WHERE-Clause enthalten sind. Wo ist das Problem? BTW: wenn's wirklich keine vernünftigen Schlüssel gibt und man ein Subselect über varchar-Spalten machen muss, würde ich mir an Deiner Stelle das Design aber noch mal ansehen...;-)

Ansonsten:
SELECT * FROM memberttable WHERE membername NOT IN (SELECT membername FROM AnmeldeTable WHERE Anmeldespiel=12345)

Sorry, ich bin um die Zeit zu faul, Deine Spalten-/Tabellennamen zu verwenden...
 
da mein sql zu alt ist, kann ich keine "not in" abfrage machen, sonst wäre es ja einfach gewesen ^^


hab das jetzt so erledigt:

PHP:
			$query_dat1="SELECT member_name FROM eqdkp_members WHERE member_rank_id ='1' OR member_rank_id ='2'";
$abfrage1=mysql_query($query_dat1);
while($array_dat1=mysql_fetch_row($abfrage1)) {
  $spieler[] = $array_dat1[0];
}

$query_dat2="SELECT spieler FROM raid_teilnehmer WHERE raid=$id";
$abfrage2=mysql_query($query_dat2);
while($array_dat2 = mysql_fetch_row($abfrage2)) {
  $angemeldet[] = $array_dat2[0];
}
if ( $angemeldet != null ){
$result = array_diff($spieler, $angemeldet);

#print_r($spieler);
#print_r($angemeldet);
#print_r($result);

$page_text .= '<font color="#000000">Nicht angemeldet:</font></b>';
foreach($result as $value) {
$page_text .= '<font color="#666666" size="1"> '.$value;
}  }
$page_text .= '<br>';
$page_text .= '<br>';
$page_text .= '
        </table></td>';
 
Zurück