Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Abfrage will nicht so wie ich will ;)
theangel
13.03.2002, 22:41
Hallo
Hab mit folgendem Code ein Problem:
$oef_con = "SELECT conID FROM mailer_musik_container WHERE oeffentlich = ´1´";
$oef_con = mysql_query($oef_con,$db);
while ($oef_con1 = mysql_fetch_array($oef_con)) {
$bookmarks = "SELECT * FROM mailer_musik WHERE conID = ´$oef_con1[conID]´";
if ($titel != "")
$bookmarks .= " AND titel LIKE ´%$titel%´";
if ($interpret != "")
$bookmarks .= " AND interpret LIKE ´%$interpret%´";
if ($format != "")
$bookmarks .= " AND format = ´$format´";
$bookmarks .= " ORDER BY interpret, titel";
$bookmarks = mysql_query($bookmarks,$db);
while ($bookmarks1 = mysql_fetch_array($bookmarks)) {
if ($bookmarks1[format] == 1)
$format = "MP3";
if ($bookmarks1[format] == 2)
$format = "WMV";
echo "...";
}
Und zwar ergibt die erste SQL-Abfrage mind. 2 Ergebnisse, jedoch wird immer nur das erste gefundene Ergebnis abgearbeitet.
Sprich, findet die erste Abfrage z.B. "Container 1" und "Container 2", so wird nur in "Container 1" nach passenden Titeln gesucht...
Weiss jemand rat?
Gruss
Basti
sorry, aber ich peil die existenzgrundlage fuer das erste statement nich... :rolleyes: :D
naja, wieso laesst du die schleife nich weg, und formulierst ein gescheites statement mit ner weiteren AND klausel? und fuer was brauchst du die id aus dem ersten statement... ?!?!
naja, das mit dem 3ten zusammengesetzten statement kommt noch einigermassen klar rueber, aber den rest versteh ich nich...
kannst du vllt. mal nen ablaufplan oder so posten, was genau das statement machen soll? bin mir sicher, das koennte man alles in ein einziges statement packen...
greetz
theangel
13.03.2002, 23:06
Endlich mal jemand der helfen will, in anderen Foren hat sich da niemand gefunden ;)
Also, wenn du Lust hast, kannst du dich mal bei http://www.project-angel.org/son/ registrieren und wenn du eingeloggt bist mal auf "Musik" klicken, dort geht es um die Suche.
Es sind zwei tabellen, einmal musik_container und einmal musik. In musik_container können die User "Ablagen" anlegen, z.B. "CD1" und diese als öffentlich oder nicht öffentlich markieren. In der Tabelle musik legen die User dann die einzelnen Musiktitel ab. Jetzt muss bei einer Suche natürlich erstmal geschaut werden welche "Ablagen" alle öffentlich sind damit das Script dann weiss, welche es durchsuchen darf und welche nicht.
Ich hab z.B. zwei öffentliche Ablagen angelegt, es wird aber immer nur die erste öffentliche Ablage in der Tabelle durchsucht :(
Gruss
Basti
ok, dann bauen wir mal das erste statement...
SELECT * FROM mailer_musik_container WHERE oeffentlich = ´1´
(zu dem ´oeffentlich´... ich emepfehle englische tabellen namen... dann hast du nich so viele probs, die sonderzeichen umzustellen, und die namen sind kuerzer... ;))
nun kannst du mit AND weitere where klauseln einbinden, was dir hoffentlich bekannt ist.
nur, was soll nun das mit dem $bookmark
d.h. was willst du mit dem 2ten statement dann bezwecken... ?!
sorry fuer die vielen fragen, aber ich bin heute abend nich mehr so ganz fit... und wenn man oft genug fraegt, merkt der coder meist selbst, was er falsch gemacht hat... ;)
theangel
13.03.2002, 23:31
Das erste Statement ist ja schon korrekt, ich brauch ja lediglich die ID der Ablagen die öffentlich sind... im zweiten Statement wird in der Tabelle mailer_musik geschaut, welche Titel in der Ablage enthalten sind.
1. Statement (Tabelle mailer_musik_container) holt sich die IDs der öffentlichen Ablagen
2. Statement (Tabelle mailer_musik) holt sich die einzelnen Lieder die in den in Statement 1 besagten Ablage enthalten sind
BS ...
also .. erstmal fehlen dir um die if clauses die brackets {} was uns aber nicht wirklich stören sollte ...
das deine while schleife nicht das 2te ergebniss abarbeitet ist komisch ... poste mal den ganzen source hier ins board .. das ist sicher hilfreicher ...
@silencer:
select * ist immer kacke .. ein DON´T EVER .. gell :-)
theangel
13.03.2002, 23:51
Echt den gesamten Quellcode? Ok, ich nehm aber mal das html-gedöns raus, sonst sieht man hier ja garnichts mehr ;)
$phpversion_array = phpversion();
$phpversion_nr = $phpversion_array[0].".".$phpversion_array[2].$phpversion_array[4];
if ((!$GLOBALS["IHaveCalledCompressionBefore"]++) && ($phpversion_nr >= 4.04)) {
if (extension_loaded("zlib")) {
ob_start("ob_gzhandler");
}
}
include "config.php";
session_start();
session_register(´Username´);
session_register(´Password´);
session_register(´UID´);
if ($Username != "" && $Password != "" && $UID != "") {
...html gedöns...
if ($CN != "Suche") {
if ($CID != "")
$ordner = "SELECT * FROM mailer_musik_container WHERE UID = ´$UID´ AND conID != ´$CID´ ORDER BY name";
if ($CID == "")
$ordner = "SELECT * FROM mailer_musik_container WHERE UID = ´$UID´ ORDER BY name";
$ordner = mysql_query($ordner,$db);
while ($ordner1 = mysql_fetch_array($ordner)) {
if ($ordner1[oeffentlich] == 1) {
$bgcolor = " bgcolor=\"#FFB400\"";
} else {
$bgcolor = "";
}
echo "...html gedöns...";
}
echo "...html gedöns...";
}
if ($CID != "") {
$bookmarks = "SELECT * FROM mailer_musik WHERE UID = ´$UID´ AND conID = ´$CID´ ORDER BY interpret, titel";
$bookmarks = mysql_query($bookmarks,$db);
while ($bookmarks1 = mysql_fetch_array($bookmarks)) {
if ($bookmarks1[format] == 1)
$format = "MP3";
if ($bookmarks1[format] == 2)
$format = "WMV";
echo "...html gedöns...";
}}
if ($CN == "Suche") {
$oef_con = "SELECT conID FROM mailer_musik_container WHERE oeffentlich = ´1´";
$oef_con = mysql_query($oef_con,$db);
while ($oef_con1 = mysql_fetch_array($oef_con)) {
$bookmarks = "SELECT * FROM mailer_musik WHERE conID = ´$oef_con1[conID]´";
if ($titel != "")
$bookmarks .= " AND titel LIKE ´%$titel%´";
if ($interpret != "")
$bookmarks .= " AND interpret LIKE ´%$interpret%´";
if ($format != "")
$bookmarks .= " AND format = ´$format´";
$bookmarks .= " ORDER BY interpret, titel";
$bookmarks = mysql_query($bookmarks,$db);
while ($bookmarks1 = mysql_fetch_array($bookmarks)) {
if ($bookmarks1[format] == 1)
$format = "MP3";
if ($bookmarks1[format] == 2)
$format = "WMV";
echo "...html gedöns...";
}
}
}
}
So, das ist der gesamte Quellcode... nur halt ohne html.
theangel
14.03.2002, 11:08
Da fällt mir grad ein, könnte es ev. auch an PHP 4.1.1 liegen? Ich zieh mir grad mal die Tabellen und teste es lokal, da hab ich noch PHP 4.0.6 installiert.
Nein, daran liegts auch nicht, lokal hab ich genau das gleiche Problem... langsam bin ich am verzweifeln weil es rein theoretisch doch funktionieren müsste.
theangel
14.03.2002, 11:33
Hab jetzt mal was ausprobiert...
Wenn ich echo "$oef_con1[conID]<br>"; in die erste while-Schleife einsetze, sehe ich als Resultat einmal die conID 3 und die conID 5. Setze ich das ganze in die zweite while-Schleife ist zu sehen, das er nur die conID 3 abarbeitet. Wenn ich die Sortierung der ersten Schleife umkehrere, arbeitet er nur conID 5 ab...
Hat vielleicht jemand anderes es geschafft eine while-Schleife in einer while-Schleife ohne Probleme zum laufen zu bekommen? Hat jemand eine Idee für eine bessere Lösung?
theangel
14.03.2002, 11:43
So, hat sich jetzt erledigt.
Hab die Datenbankstruktur umgestellt so das jetzt nurnoch eine SQL-Abfrage notwendig ist... hat zwar eine gewisse down-Zeit für die User bedeutet, aber was solls.
@bauchi: jo, don´t... aber wenn du die feldnamen net kennst, ist das am sinnvollstes... :P
@theangel:
wie lange braucht das statement zur ausfuehrung? ich meine, bei ein paar hundert datensaetzen sollte es max. 2 - 8 sekunden dauern... ansonsten wuerd ich mal die indizes und die key´s in der datenbank veraendern...
greetz
theangel
14.03.2002, 14:22
Ich hab die Indizies schon sinnvoll gesetzt ;)
Bei im Moment etwa 500 Einträgen in der Datenbank braucht es zwischen 0.3 und 0.5 Sekunden.
Alles was regelmässig über 1 Sekunde braucht ist für mich nicht akzeptabel.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.