Wie exakte Suchanfrage formulieren?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie exakte Suchanfrage formulieren?

    Hi,

    habe grad ein Problem an dem ich mir die Zähne ausbeiße.

    Gegeben ist eine Datenbank die Songs enthält.

    z.B.:
    Mike - She Says (Vocal Mix)
    Savon - Believe (Mike Nero Remix)
    Savon - One Million Strings (Mike Nero Remix)
    Savon - Music Reload (Mike Nero Remix)
    2 Brothers On The 1st Floor - The Drum Beats Go (Club Mix)

    und ein paar erfundene:
    Test - Test (First Mike Nero's Mix)
    Test - Test (Mike's Remix)


    Dabei wird unterschieden in Trackname und Remix. Die Anzeige der Tracks ein Artisten ist die erste Abfrage (einfach) und die Anzeige der von dem Artisten produzierten Remixen die zweite (Problem)

    Angenommen ich lasse mir die Details von "Mike Nero" anzeigen, so gibt es bei den oben genannten Einträgen nur 4 Treffer unter Remixen und zwar alle die "Mike Nero" oder "Mike Nero's" enthalten.

    Problem:
    Will ich die Detail von "Mike" haben, bekomme ich den einen Track sowie "Test - Test (Mike's Remix)". Aber auch die 4 Remixe (von Mike Nero) die aber nix damit zu tun haben.


    Folgender Ausschnitt zeigt die derzeite Zwischenlösung zum zählen der Remixe.

    PHP-Code:
    $sql="SELECT remix FROM tracks WHERE (remix LIKE '% ".addslashes($artist)." %' OR remix LIKE '".addslashes($artist)." %' 
    OR remix LIKE '"
    .addslashes($artist)."\'%' OR remix LIKE '% ".addslashes($artist)."\'%') AND artist <> '".addslashes($artist)."' 
    AND risk = '0' ORDER BY artist, trackname ASC"
    ;
    $res mysql_query($sql) or die('Es ist ein Fehler aufgetreten. Die Aktion wurde abgebrochen!');
    $i 0;
    while(
    $row =  mysql_fetch_array($res))
    {
        
    $a explode (" "$row["remix"]);
        
    $j 0/* nur zu Veranschaulichung */
        
    foreach($a as $v) {
            
    $l $j 1;
            if (
    $j && $i == 0)
            {
                
    $artistremix $a[$l]." ".$a[$j];
                if ((
    $artistremix == $artist) || ($artistremix == "$artist's"))
                {
                    
    $sql3"SELECT artist, trackname, remix FROM tracks WHERE (remix LIKE '% ".addslashes($artistremix)." %' OR 
                    remix LIKE '"
    .addslashes($artistremix)." %' OR remix LIKE '".addslashes($artistremix)."\'%' OR remix LIKE '% 
                    "
    .addslashes($artistremix)."\'%') AND artist <> '".addslashes($artistremix)."' AND risk = '0'";
                    
    $res3 mysql_query($sql3) or die('Es ist ein Fehler aufgetreten. Die Aktion wurde abgebrochen!');
                    while(
    $row3 =  mysql_fetch_array($res3))
                    {
                        
    #echo $row3["artist"]." - ".$row3["trackname"]." (".$row3["remix"].")<br />";
                        
    $i++;
                    }
                }
            }
        
    $j++;
        }
    }
    $anzahlremixe $i
    Das löst zwar das vorherige Problem, ignoriert nun aber "Test - Test (Mike's Remix)", bzw. funktioniert nicht mehr wenn der Artistname aus mehr als 2 Teilwörtern besteht.


    Wie bekomme ich es hin, nur das zu erhalten was ich auch wirklich haben will? Oder ist das in dem Fall unmöglich?

    Danke
    Sayon
Lädt...
X