URL: https://www.overclockers.at/coding-stuff/php_problem_mit_sql_abfrage_107913/page_1 - zur Vollversion wechseln!
Folgender Codeschnipsel gibt mir nur die Werte zurück die direkt unter "while($rowa = mysql_fetch_array($r_sql_text)){" gefunden werden, die darunter verschachtelten werden nicht gefunden.
Aber ich weiss nicht warum,... und pls nicht über den stil meckern, wers besser kann kann gern einen neuen vorschlag posten
Code: PHP$z = 0; $a_new = array(); $r_sql_text = mysql_db_query($datenbk, $sql_text); while($rowa = mysql_fetch_array($r_sql_text)){ if($rowa[titel] != ""){ $array = array('titel' => $rowa[titel], 'url' => $rowa[url], 'text' => $rowa[text], 'seit' => $rowa[seit], 'webmaster' => $rowa[benutzer], 'pos' => 3); array_push($a_new, $array); echo "3 "; $z++; } else { $r_sql_such = mysql_db_query($datenbk, $sql_such); while($rowb = mysql_fetch_array($r_sql_such)){ if($rowb[titel] != ""){ $array = array('titel' => $rowb[titel], 'url' => $rowb[url], 'text' => $rowb[text], 'seit' => $rowb[seit], 'webmaster' => $rowb[benutzer], 'pos' => 2); array_push($a_new, $array); echo "2 "; $z++; } else { $r_sql_titel = mysql_db_query($datenbk, $sql_titel); while($rowc = mysql_fetch_array($r_sql_titel)){ if($rowc[titel] != ""){ $array = array('titel' => $rowc[titel], 'url' => $rowc[url], 'text' => $rowc[text], 'seit' => $rowc[seit], 'webmaster' => $rowc[benutzer], 'pos' => 1); array_push($a_new, $array); echo "1 "; $z++; } } } } } } $z--; for($i = 0; $i <= $z; $i++){ echo("<br>\n"); echo("<table width=\"800\" border=\"0\" cellspacing=\"1\" cellpadding=\"3\" bgcolor=\"#000000\">\n"); echo(" <tr bgcolor=\"#EEEEEE\"> \n"); echo(" <td colspan=\"3\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"><a href=\"".$a_new[$i]['url']."\" target=\"_blank\">".$a_new[$i]['titel']."</a></font></td>\n"); echo(" </tr>\n"); echo(" <tr bgcolor=\"#DDDDEE\"> \n"); echo(" <td colspan=\"3\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\">".$a_new[$i]['text']."</font></td>\n"); echo(" </tr>\n"); echo(" <tr bgcolor=\"#DDDDEE\"> \n"); echo(" <td width=\"50%\"><font size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\">Seitenanmeldung: ".$a_new[$i]['seit']."</font></td>\n"); echo(" <td width=\"50%\" bgcolor=\"#DDDDEE\" align=\"right\"><font size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\">Alle Seiten dieses Webmasters</font></td>\n"); echo(" </tr>\n"); echo("</table>\n"); echo("<br>\n\n"); } }
wo kommt sql_text und sql_such her?
und trotzdem: dein stil is shize, kein einziger comment und die struktur is total unübersichtlich - denn _wir_ (die nicht darüber meckern sollen/dürfen) müssen ja den code auch verstehen, damit wir dir helfen können
bekommst du überhaupt datensätze aus $sql_text, die keinen titel haben? ich würde mal im else zweig der ersten if abfrage ein echo hinzufügen um das zu kontrollieren.
Hi,
aus $sql_text bekomm ich werte, je nachdem wieviele geunden werden, aus $sql_such und $sql_titel kommen keine Daten, die Daten für $sql_text und die anderen beiden kommen von hier:
Code: PHP//SUCHWÖRTER DURCHSUCHEN for($i = 0; $i <= $anzahl; $i++){ if($i == 0){ $sql_such = $sql."such LIKE '%".$worte[$i]."%'"; } if($i != 0 && $i != $anzahl) { $sql_such = $sql_such." OR such LIKE '%".$worte[$i]."%'"; } } //TEXT DURCHSUCHEN for($i = 0; $i <= $anzahl; $i++){ if($i == 0){ $sql_text = $sql."text LIKE '%".$worte[$i]."%'"; } if($i != 0 && $i != $anzahl) { $sql_text = $sql_text." OR text LIKE '% ".$worte[$i]."%'"; } } //TITEL DURCHSUCHEN for($i = 0; $i <= $anzahl; $i++){ if($i == 0){ $sql_titel = $sql."titel LIKE '%".$worte[$i]."%'"; } if($i != 0 && $i != $anzahl) { $sql_titel = $sql_titel." OR titel LIKE '% ".$worte[$i]."%'"; } }
du bist zwar nicht genau auf meine frage eingegangen, aber wenn ich es richtig verstanden habe, sollte folgendes helfen:
Code: PHP$z = 0; $a_new = array(); if($z <= 0) { $r_sql_text = mysql_db_query($datenbk, $sql_text); while($rowa = mysql_fetch_array($r_sql_text)) { if($rowa[titel] != "") { $array = array('titel' => $rowa[titel], 'url' => $rowa[url], 'text' => $rowa[text], 'seit' => $rowa[seit], 'webmaster' => $rowa[benutzer], 'pos' => 3); array_push($a_new, $array); echo "3 "; $z++; } } } if($z <= 0) { $r_sql_such = mysql_db_query($datenbk, $sql_such); while($rowb = mysql_fetch_array($r_sql_such)) { if($rowb[titel] != "") { $array = array('titel' => $rowb[titel], 'url' => $rowb[url], 'text' => $rowb[text], 'seit' => $rowb[seit], 'webmaster' => $rowb[benutzer], 'pos' => 2); array_push($a_new, $array); echo "2 "; $z++; } } } if($z <= 0) { $r_sql_titel = mysql_db_query($datenbk, $sql_titel); while($rowc = mysql_fetch_array($r_sql_titel)) { if($rowc[titel] != "") { $array = array('titel' => $rowc[titel], 'url' => $rowc[url], 'text' => $rowc[text], 'seit' => $rowc[seit], 'webmaster' => $rowc[benutzer], 'pos' => 1); array_push($a_new, $array); echo "1 "; $z++; } } }
yo danke funtzt soweit, jetzt wird aber pro suchbegriff nur der erste treffer gematched, also wenn bei $sql_text schon was gefunden wird ja nicht mehr weitergesucht ob ein andere datenbankeintrag in $sql_such oder $sql_titel das suchwort enthält.
Achja @roye: ich bekomm bei $sql_text mit meiner schleife die richtigen datensätze aus der Datenbank. es wird halt nur nicht weitergesucht über die letzten beiden schleifen für such und titel.
thx dir schonmal bisher haste noch ne idee wie man jetzt noch alle 3 durchsuchen kann ?
Zitat von bBU.CyTrobIcyo danke funtzt soweit, jetzt wird aber pro suchbegriff nur der erste treffer gematched, also wenn bei $sql_text schon was gefunden wird ja nicht mehr weitergesucht ob ein andere datenbankeintrag in $sql_such oder $sql_titel das suchwort enthält.
Achja @roye: ich bekomm bei $sql_text mit meiner schleife die richtigen datensätze aus der Datenbank. es wird halt nur nicht weitergesucht über die letzten beiden schleifen für such und titel.
thx dir schonmal bisherhaste noch ne idee wie man jetzt noch alle 3 durchsuchen kann ?
Zitat von bBU.CyTrobIcDer Code ansich soll folgendes tun, wenn das erste der suchwörter nicht mit $sql_text gefunden werden soll $sql_such durchsucht werden, wird dort auch nichts gefunden soll $sql_titel durchsucht werden. Dann von vorne mit den 2 dann mit dem 3 suchwort usw.
ja das könnt ich machen, aber wie kann ich dann differenzieren in welchem Feld (text, such oder titel) das wort gefunden wurde ?
ich möchte die daten nähmlich danach ausgeben, oben sollen die datensätze stehen wo das suchwort in "text" gefunden wurde, darunter die wo das suchwort in "such" und ganz unten sollen die in "titel" gefundenen datensätze stehen.
dann würde ich auf die schnelle alle 3 sql abfragen durchrasseln und mich dann mit http://de.php.net/manual/de/function.array-unique.php beschäftigen :-)
oder du machst es auf die art:Zitat von royedann würde ich auf die schnelle alle 3 sql abfragen durchrasseln und mich dann mit http://de.php.net/manual/de/function.array-unique.php beschäftigen :-)
Code:SELECT titel,[andere columns] FROM [table] WHERE [bla] UNION SELECT text,[andere columns] FROM [table] WHERE [bla] UNION SELECT woerter,[andere columns] FROM [table] WHERE [bla]
hmm... *****, andere möglichkeit gibts nicht ? mit array unique schmeiss ich ja doppelte raus, aber ich hab ja die variable $pos, die 1, 2 oder 3 sein kann, je nachdem in welchem abschnitt das wort gefunden wurde... deshalb funktioniert dies ja nicht mit unique.
Die funktion mit union sagt mir garnichts
dann würde ich vor dem reinspeichern in das array, abfragen ob dieser datensatz schon existiert, zum beispiel, du wirst ja irgendein unique feld in deiner tabelle haben. zum beispiel wenn "titel" dein index ist, in etwa so:
Code: PHP$z = 0; $a_new = array(); $myindex = array(); $r_sql_text = mysql_db_query($datenbk, $sql_text); while($rowa = mysql_fetch_array($r_sql_text)) { if($rowa[titel] != "" && $myindex[$rowa[titel]] != 1) { $myindex[$rowa[titel]]=1; $array = array('titel' => $rowa[titel], 'url' => $rowa[url], 'text' => $rowa[text], 'seit' => $rowa[seit], 'webmaster' => $rowa[benutzer], 'pos' => 3); array_push($a_new, $array); echo "3 "; $z++; } } $r_sql_such = mysql_db_query($datenbk, $sql_such); while($rowb = mysql_fetch_array($r_sql_such)) { if($rowb[titel] != "" && $myindex[$rowb[titel]] != 1) { $myindex[$rowb[titel]]=1; $array = array('titel' => $rowb[titel], 'url' => $rowb[url], 'text' => $rowb[text], 'seit' => $rowb[seit], 'webmaster' => $rowb[benutzer], 'pos' => 2); array_push($a_new, $array); echo "2 "; $z++; } } $r_sql_titel = mysql_db_query($datenbk, $sql_titel); while($rowc = mysql_fetch_array($r_sql_titel)) { if($rowc[titel] != "" && $myindex[$rowc[titel]] != 1) { $myindex[$rowc[titel]]=1; $array = array('titel' => $rowc[titel], 'url' => $rowc[url], 'text' => $rowc[text], 'seit' => $rowc[seit], 'webmaster' => $rowc[benutzer], 'pos' => 1); array_push($a_new, $array); echo "1 "; $z++; } }
http://www.mysql.com/documentation/...ntax.html#UNIONZitat von bBU.CyTrobIcDie funktion mit union sagt mir garnichts
thx roye aber das haut irgendwie nicht so richtig hin... muss ich nochmal schauen aber thx
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025