• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Unique-Ausgabe in MySQL ..möglich?

lascaux

Mitglied
Hallo,

ich probier mal, mein Problem verständlich zu erklären:

Ich schreibe an einem Verzeichnis für DJs aus meiner Region. Und da sich meine Datenbank so langsam füllt, schreit das ganze noch vor Release nach neuen Funktionen.

Ich habe es so gestaltet, dass wenn man ein DJ-Profil aufruft, in der linken Hälfte der Seite ein Verzeichnis ist, mit weiteren DJs die eine ähnliche Musikrichtung spielen. Ich habe jedem DJ 2 Musikrichtungen zugeteilt.

zB

Nico Rous - Deep House - Minimal Techno
Björn Hofmann - Minimal Techno - Tech House
Sven Serfass - Minimal Techo - Deep House.

Nico Rous hat also Deep House als Hauptstil und Minimal Techno als Nebenstil. Soweit so gut. MySQL spielt auch soweit mit.


Wenn ich nun aber ... achje wie erklärt man das?!..

Ich mach das mal so..

PHP:
$q1s1s = 'SELECT uid, artist FROM '.$db_tab2.' WHERE 1st_style="'.$at_1st_style.'" AND uid !="'.$aid.'" ORDER BY RAND() LIMIT 8';
$r1s1s = mysql_query($q1s1s);
while($row11 = mysql_fetch_array($r1s1s)) {    $res11uid = $row11['uid']; 
  $res11art = $row11['artist'];
  echo '      <a href="show.php?aid='.$res11uid.'" title="'.$res11art.'">'.$res11art.'</a><br />';
  echo "\n";
}    

$q1s2s = 'SELECT uid, artist FROM '.$db_tab2.' WHERE 2nd_style="'.$at_1st_style.'" AND uid !="'.$aid.'" ORDER BY RAND() LIMIT 8';
$r1s2s = mysql_query($q1s2s);
while($row12 = mysql_fetch_array($r1s2s)) {
  $res12uid = $row12['uid'];
  $res12art = $row12['artist'];
  echo '      <a href="show.php?aid='.$res11uid.'" title="'.$res12art.'">'.$res12art.'</a><br />';
  echo "\n";
}

$q2s1s = 'SELECT uid, artist FROM '.$db_tab2.' WHERE 2nd_style="'.$at_1st_style.'" AND uid !="'.$aid.'" ORDER BY RAND() LIMIT 8';$r2s1s = mysql_query($q2s1s);while($row21 = mysql_fetch_array($r2s1s)) {  $res21uid = $row21['uid'];  $res21art = $row21['artist'];  echo '      <a href="show.php?aid='.$res21uid.'" title="'.$res21art.'">'.$res11art.'</a><br />';  echo "\n";  }  $q2s2s = 'SELECT uid, artist FROM '.$db_tab2.' WHERE 2nd_style="'.$at_2nd_style.'" AND uid !="'.$aid.'" ORDER BY RAND() LIMIT 8';$r2s2s = mysql_query($q2s2s);while($row22 = mysql_fetch_array($r2s2s)) {  $res22uid = $row22['uid'];  $res22art = $row22['artist'];  echo '      <a href="show.php?aid='.$res22uid.'" title="'.$res22art.'">'.$res22art.'</a><br />';  echo "\n";
}

So, wenn DJ #1 den Musikstil A hat, soll nach allen DJs gesucht werden, die als Primären Musikstil, Musikstil A haben, ausgenommen dem DJ, der bereits angezeigt wird.
Danach wird nach allen DJs gesucht, die den Musikstil A als zweiten Musikstil haben, wieder mit ausname des DJs, der bereits angezeigt wird.
Soweit so gut, es funktioniert.. auch wenn der Code etwas umständlich ist.

Dann wird nach allen DJs gesucht, die den Musikstil B als Primären haben, wieder ohne den angezeigten DJ.
Dann folgt jeder DJ mit dem Musikstil B als Sekundären Musikstil, wieder mit einer ausnahme.

Soweit so gut, in der Theorie sieht es gut aus. Nur habe ich das Problem, dass pro Sparte teilweise 2 mal der selbe DJ auftaucht, da es ja so gesehen möglich ist, da 2 mal nach jedem Musikstil gesucht wird.


Meine Frage hierzu:

Gibt es einen MySQL-Befehl (den ich jetzt die letzte Stunde übersehen habe), der mir erlaubt bereits ausgegebene DJs ohne vorgegebene Merkmale auszuschließen damit dieser nicht 2 mal in einer Liste auftaucht?
Wenn nicht, gäbe es da eine PHP-Lösung?
Wenn ja, welche?
Bzw, gibt es eine andere Möglichkeit? zB wenn man die Ausgabe nicht verhindern kann, dass man den doppelten DJ mittels Javascript ausblendet?


Für Tipps wäre ich sehr sehr dankbar.



lascaux
 
Werbung:
Danke für die Antwort, aber ich habe durch rumprobieren festgestellt, dass es alleine durch MySQL nicht lösbar ist, das wäre sehr aufwendig. Man müsste das ganze mit Arrays machen denke ich und doppelte einfach ausschließen .. Nur habe ich absolut keine Ahnung wie ich das machen soll. Jemand eine Idee?
 
Werbung:
Hallo,

Soweit ich das in dem Beispiel sehe würde ich es mit einer einzigen Query lösen mit verschiedenen WHERE Bedingungen (entweder den gleichen Musikstil A als 1te Wahl oder als 2te Wahl haben oder Musikstil B als 1te Wahl oder 2te Wahl). Das ganze dann mit distinct ergänzen und der Käse ist gelutscht.
 
Außerdem würde ich persönlich 2 neue Tabellen einrichten:

Musikstil
MS_ID, MS_TITLE

User_Stil
ARTIST_ID, MS_ID

Du kannst dann neue Musikstil eintragen

1 TechnoToll
2 TechnoNichtSoToll
3 HouseXY
4 Minimal

Und die Benutzer können sich beliebig viele Stile eintragen.

User_Stil
1, 5
1, 3
1, 8
2, 1
2, 5
3, 1

In deiner vorhandenen Tabelle entfernst du die beiden Spalten "Stil1, Stil2" und bevor du deine oben genannte Abfrage machst, joinst du die Tabellen..
 
Zurück
Oben