SQL-Abfrage LIKE
Christian
- datenbank
Hi,
ich habe eine Frage. Ich habe eine Tabelle in der User Einträge nach diesem Schema vornehmen, beispielsweise:
Red Hot Chili Peppers - Greatest Hits
Nun möchte ich mit einer SQL-Abfrage alle User abfangen, die beispielsweise Red Hot Chili Peppers in diesem Feld eingetragen haben, also auch andere Alben dieser Band.
Die SQL-Abfrage mit LIKE, die eine Variable mit dem Inhalt "Red Hot Chili Peppers" abfragt, bringt nur User, die tatsächlich den ganzen String (also: Red Hot Chili Peppers - Greatest Hits) eingetragen haben, und nicht ähnliche, oder solche die mit dem Bandnamen beginnen.
Wie muss die Abfrage aussehen, damit das Ergebnis wie beschrieben aussieht?
Danke für eure Hilfe.
Christian
Hi,
hmmm, wäre interessant zu wissen, ob du nur eine tabelle für interpreten und album verwendest oder zwei.
Die SQL-Abfrage mit LIKE, die eine Variable mit dem Inhalt "Red Hot Chili Peppers" abfragt, bringt nur User, die tatsächlich den ganzen String (also: Red Hot Chili Peppers - Greatest Hits) eingetragen haben, und nicht ähnliche, oder solche die mit dem Bandnamen beginnen.
versuch mal "%Red Hot Chili Peppers%", aber viel interessanter ist die frage, der einen oder zwei tabellen.
Ilja
versuch mal "%Red Hot Chili Peppers%", aber viel interessanter ist die frage, der einen oder zwei tabellen.
danke, hab das mal gesteset, dann bekomme ich gar kein ergebnis ...
variable sieht so so aus:
bandname - album
wird allerdings voin den usern relativ frei eingetragen, kann also auch nur bandname oder nur album sein ...
thx
danke, hab das mal gesteset, dann bekomme ich gar kein ergebnis ...
kommando zurück, so funktionierts ;-)
danke
yo,
kommando zurück, so funktionierts ;-)
denk an den tip, das eventuell in zwei tabellen aufzuteilen, also eine für die interpreten udn eine für die alben.
Ilja
denk an den tip, das eventuell in zwei tabellen aufzuteilen, also eine für die interpreten udn eine für die alben.
ok, danke für den tipp
sag mal, gibts so ne ähnliche funktion auch für php?
also auf dieser seite kannst du dir mal das ergebnis ansehen
in der rubrik now playing wäre es dann toll, wenn an dieser stelle alle tabellen mit der jeweiligen band (in dem fall red hot chili peppers) nicht angezeigt werden, da sie weiter unten ohnehin nochmal angezeigt werden.
danke für deine hilfe
christian
also auf dieser seite kannst du dir mal das ergebnis ansehen
sorry, hier der link ...
http://www.ringrocker.com/modules.php?name=AmazonShop&op=ASINSearch&page=1&asin=B00000J7JO
in der rubrik now playing wäre es dann toll, wenn an dieser stelle alle tabellen mit der jeweiligen band (in dem fall red hot chili peppers) nicht angezeigt werden, da sie weiter unten ohnehin nochmal angezeigt werden.
ich bin ein wenig verwirrt. now playing ist wohl die cd von den roten scharfen bohnen. zweiter tabelle sind die gruppen/alben, die von den hörer von red ebenfalls gehört werden und die dtritte tabelle gibt verwandete gruppen/alben aus.
grundsätzlich würde ich sagen, sollte die reds aus der zweiten und der dritten tabelle rausgenommen werden. das geht auch mit php, aber eleganter über mysql (oder ein anderes dbms). hängt ein wenig von deiner struktur ab, aber grundsätzlich werden die red bones in der Bedingung ausgeschlossen. gib mal ein wenig mehr info
Ilja
ich bin ein wenig verwirrt. ..... gib mal ein wenig mehr info
ok, also ist bisschen kompliziert, das geb ich zu
also, es gibt jeweils drei tabellen (lieblingsalbum 1,2,3)in der tabelle der user nach dem schema bandname - album, wobei artist und albumname nicht getrennt sind, sondern jeweils so in dem feld drin stehen
diese frage ich nun dank deines hinweise nun mit LIKE '%artist%' ab - funktioniert auch prima, jetzt hätte ich halt gerne noch, dass jeweils das Feld in der Begriff der mit LIKE abgefragt wird (in dem Fall Red Hot Chili Peppers) in dieser Auflistung nicht erscheint, da es unlogisch mit der Überschrift ist
"ringrocker die peppers möhen mögen auch peppers" steht dann natürlich da
daher meine frage, ob es eine möglichkeit gibt, dieses teil des ergebnisses jeweils auszublenden
hoffe das ist einigermaßen verständlich
christian
yo,
wobei artist und albumname nicht getrennt sind, sondern jeweils so in dem feld drin stehen
das ist wie gesagt nicht zu empfehlen und sollte geändert werden, bevor weitere änderungen vorgenommen werden. der grund ist der, das je später das datenbankschema verändert wird, desto mehr arbeit macht. deswegen je früher um so besser. die veränderungen haben auswirkungen auf die weitere vorgehensweise und verbesserungen. das wäre doppelte arbeit.
diese frage ich nun dank deines hinweise nun mit LIKE '%artist%' ab - funktioniert auch prima,
das war nur ein tip als übergangslösung. besonders elegant ist das nämlich nicht. wenn du die interpreten erst einmal von den alben getrennt hast, ergeben sich andere möglichkeiten. zum einen können dann die user aus einer liste die interpreten auswählen und man muss nicht mehr mit like arbeiten.
jetzt hätte ich halt gerne noch, dass jeweils das Feld in der Begriff der mit LIKE abgefragt wird (in dem Fall Red Hot Chili Peppers) in dieser Auflistung nicht erscheint, da es unlogisch mit der Überschrift ist
jau, das habe ich verstanden und das geht auch, sowohl über php als auch mit mysql, wobei mysql vorzuziehen ist. dazu wäre es aber hilfreich, die abfragen zu kennen. und diese ändern sich auch wieder, wenn du die interpreten und die alben getrennt hast. ;-)
mir ist noch etwas aufgefallen, wo ich mir nicht ganz sicher bin und deswegen war aich auf den ersten blick ein wenig verwirrt. die überschriften der zweiten tabelle ist now playing. aber dann kommt eine auflistung der interpreten, für die sich die hörer von red hot ebenfalls interessieren.
Ilja
das war nur ein tip als übergangslösung. besonders elegant ist das nämlich nicht. wenn du die interpreten erst einmal von den alben getrennt hast, ergeben sich andere möglichkeiten. zum einen können dann die user aus einer liste die interpreten auswählen und man muss nicht mehr mit like arbeiten.
das problem ist, dass ich eine änderung der tabellen vermeiden möchte, da bereits mehrer tausend user dort eintragungen gemacht haben und das alles wieder ändern müssten ...
mir ist noch etwas aufgefallen, wo ich mir nicht ganz sicher bin und deswegen war aich auf den ersten blick ein wenig verwirrt. die überschriften der zweiten tabelle ist now playing. aber dann kommt eine auflistung der interpreten, für die sich die hörer von red hot ebenfalls interessieren.
das ist ein feature, das woanders auch verlinkt ist und den usern bekannt, aber danke für den hinweis
das problem ist, dass ich eine änderung der tabellen vermeiden möchte, da bereits mehrer tausend user dort eintragungen gemacht haben und das alles wieder ändern müssten ...
probleme sind zum lösen und nicht zum verzweifeln da. ;-)
eine änderung eines schemas ist zwar immer mit arbeit verbunden, aber nicht unmöglich. auch können die alten einträge übernommen werden. aber egal, wenn es erst einmal zuviel aufwand macht, dann eben auch ohne zwei tabellen.
zeig doch mal die sql abfragen der beiden unteren tabellen, damit wir den aktuellen rausbekommen.
Ilja
zeig doch mal die sql abfragen der beiden unteren tabellen, damit wir den aktuellen rausbekommen.
ok, danke für deine hilfe
anbei die abfrage der now-playing list
$user = mysql_query("select uid, uname, user_aim, user_yim, user_msnm FROM nuke_users WHERE user_aim LIKE '%$Author%' OR user_yim LIKE '%$Author%' OR user_msnm LIKE '%$Author%' ORDER BY RAND(),uid LIMIT 3");
//$array2 = mysql_fetch_array($user);
while($array2 = mysql_fetch_assoc($user)) {
$array2[user_aim] = stripslashes($array2[user_aim]);
$array2[user_aim] = ucwords ($array2[user_aim]);
$array2[user_aim] = str_replace("1.","",$array2[user_aim]);
$array2[user_aim] = str_replace("/","",$array2[user_aim]);
$array2[user_yim] = stripslashes($array2[user_yim]);
$array2[user_yim] = ucwords ($array2[user_yim]);
$array2[user_yim] = str_replace("2.","",$array2[user_yim]);
$array2[user_yim] = str_replace("/","",$array2[user_yim]);
$array2[user_msns] = stripslashes($array2[user_msnm]);
$array2[user_msnm] = ucwords ($array2[user_msnm]);
$array2[user_msnm] = str_replace("3.","",$array2[user_msnm]);
$array2[user_msnm] = str_replace("/","",$array2[user_msnm]);
echo "<table>";
echo "<tr><td>$array2[user_aim] <a class="linkrot" href="">>></a><td></tr>";
echo "<tr><td>$array2[user_yim] <a class="linkrot" href="">>></a></td></tr>";
echo "<tr><td>$array2[user_msnm] <a class="linkrot" href="">>></a></td></tr>";
echo "</table>";
yo,
$user = mysql_query("select uid, uname, user_aim, user_yim, user_msnm FROM nuke_users WHERE user_aim LIKE '%$Author%' OR user_yim LIKE '%$Author%' OR user_msnm LIKE '%$Author%' ORDER BY RAND(),uid LIMIT 3");
willst du nur das selbe album "Red Hot Chili Peppers - Californication" aus der liste raushaben, kannst du das über die uid ausschließen, also bei der WHERE eine zusätzliche bedingung einfügen und mit einem logischen und verknüpfen.
WHERE uid <> $variable_ mit_der_now_playing_uid AND restliche Bedingungen.....
willst du alle von red hots raus haben, gehst du über den uname, wenn ich mich nicht ganz täusche.
WHERE uname NOT LIKE '%$Author%' AND restliche Bedingungen.....
versuch das mal.
Ilja
das ganze ist doch bisschen komplizierter als ich dachte
vor allem für jemanden, der die strutur der tabellen nicht kennt
die user id davon nicht betroffen
also das ganze findet zwar in einer usertabelle statt, die haben ids und namen und unter anderem auch diese drei felder, in denen diese alben (oft nach dem muster bandnae - album) drinstehen
ich denke eine abfrage über die user id bringt mich in dem fall nicht weiter
bin wieder da,
ich denke eine abfrage über die user id bringt mich in dem fall nicht weiter
hast du es denn mal ausprobiert ? die user id sollte der seite schon irgendwo in einer variablen zur verfügung stehen. schließlich ist sie ja die cd der woche. dann musst du nur noch die WHERE klausel um die eine Bedingung erweitern. versuch es mal.
Ilja