Verbesserungen des Codes

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verbesserungen des Codes

    Hey.

    Ich habe nur indirekt eine Frage,
    nämlich ob man den folgenden Code (er ist nicht von mir, aber open source)
    noch verbessern kann da er produktiv eingesetzt werden soll.

    Und vielleicht kann mir jemand noch verraten wie ich neben "name" auch noch "isbn" durchsuchen lassen kann?
    Isbn ist die Spalte neben Name, arbeitet man da weiterhin mit JOIN?

    Würde mich über Antworten freuen,
    Greetz

    Quellcode

    1. <p id="searchresults">
    2. <?php
    3. $db = new mysqli('localhost', 'xxx', 'xxx', 'xxx');
    4. if(!$db) {
    5. echo 'Kann mich nicht mit der Datenbank verbinden.';
    6. } else {
    7. if(isset($_POST['queryString'])) {
    8. $queryString = $db->real_escape_string($_POST['queryString']);
    9. if(strlen($queryString) >0) {
    10. $query = $db->query("SELECT * FROM search s INNER JOIN categories c ON s.cat_id = c.cid WHERE name LIKE '%". $queryString . "%' ORDER BY cat_id LIMIT 8");
    11. if($query) {
    12. $catid = 0;
    13. while ($result = $query ->fetch_object()) {
    14. if($result->cat_id != $catid) {
    15. echo '<span class="category">'.$result->cat_name.'</span>';
    16. $catid = $result->cat_id;
    17. }
    18. echo '<a href="'.$result->url.'">';
    19. echo '<img src="bilder/'.$result->img.'" alt="" />';
    20. $name = $result->name;
    21. if(strlen($name) > 35) {
    22. $name = substr($name, 0, 35) . "...";
    23. }
    24. echo '<span class="searchheading">'.$name.'</span>';
    25. $description = $result->desc;
    26. if(strlen($description) > 80) {
    27. $description = substr($description, 0, 80) . "...";
    28. }
    29. echo '<span>'.$description.'</span></a>';
    30. }
    31. echo '<span class="seperator"><a href="xxx" title="Kontakt">Nix gefunden?</a></span><br class="break" />';
    32. } else {
    33. echo 'Es gibt ein Problem mit dem query.';
    34. }
    35. } else {
    36. }
    37. } else {
    38. echo 'Denkst du wirklich es wäre so leicht? ;)';
    39. }
    40. }
    41. ?>
    42. </p>
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von schreient ()

  • Naja, programmiertechnisch ist der Code nicht gut. Man sollte sich besser am Model-View-Controller Pattern orientieren.

    Was die Datenbank betrifft:
    * LIKE Abfragen mit % vorne und hinten sind nicht optimal, da der Index nicht genutzt werden kann.
    * es ist besser wenn du mit einem Volltextindex arbeitest (MATCH .. AGAINST)
    * befindet sich "name" in der categories Tabelle? Dann solltest du lieber von categories nach search joinen und nicht umgekehrt.
    * Im Fall von name solltest du einen Tabellen Prefix verwenden, damit jeder Programmierer weiß, welche Tabelle du abfragst
    * Wennmöglich solltest du nur die Spalten selektieren die du benötigst

    Lg
  • Ok, vielen Dank erneut für die Info(´s) und Antwort, ich hab werd mich damit näher beschaffen.
    War ich also doch in der richtigen Annahme das es mehr als nur eine Verbesserung geben kann und ich hier erneut richtig bin :)

    In der "categories" Tabelle befindet sich eine ID und cat_name, welches in meinem Falle nur für die Genre steht.
    In der "search" befinden sich alle anderen Infos, wie: ID, Name, Vorschaubild, Beschreibung und Ziel-URL.

    Ich hätte das ganze generell gerne später umgestrickt; da ich befürchte wenn in der search xxx Millionen Einträge sind, die Datenbank das nicht mitmacht,
    vom aufrufen in phpmyadmin oder dem auslesen, ganz zu schweigen.