Ergebnis 1 bis 10 von 10

Thema: Problem mit MySQL Abfrage

  1. #1
    Teeny
    Registriert seit
    24.05.2009
    Beiträge
    22
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard [gelöst] Problem mit MySQL Abfrage

    Hallo,

    Ich habe mich aufgrund eines Tipps hier angemeldet und habe eine Frage.

    Folgendes Problem:
    Ich möchte bei einem Suchauftrag einteilen in: Text und Video oder beides (als angezeigte Ergebnise).

    Jetzt ist die bestehende Anfrage schon soweit, dass die Eingabe ($eingabe)
    in den Spalten tags,title, text und url gesucht wird, wenn es einen Treffer gibt: Wird alles ausgeben.

    Das sieht dann so aus:
    PHP-Code:
      $resp mysql_query("SELECT * FROM ".$kategorie." WHERE text like '%".$eingabe."%' OR tags like '%".$eingabe."%' OR titel like '%".$eingabe."%' OR url like '%".$eingabe."%' ORDER BY id DESC") or die (mysql_error()); 
    Jetzt möchte ich aber einbauen, dass er vorher schon nach Kategorien filtert, also NUR die Einträge hergibt, die auch zur ausgewählten Kategorie (Beispiel: Text) gehören.

    Jetzt denke ich mir: Kann ich ja mit
    PHP-Code:
    WHERE typ='text' AND text like .... 
    realisieren, aber es geht nicht.

    Der Code sieht nun also so aus:

    PHP-Code:
      $resp mysql_query("SELECT * FROM ".$kategorie." WHERE typ='text' AND text like '%".$eingabe."%' OR tags like '%".$eingabe."%' OR titel like '%".$eingabe."%' OR url like '%".$eingabe."%' ORDER BY id DESC") or die (mysql_error()); 
    Nun gibt er mir nicht nur die Einträge aus Kategorie "text" aus, sondern alle auf die die Eingabe passt.

    Ich hoffe ich konnte das Problem verständlich beschreiben und finde jemanden der mir hilft, ich habe schon einiges rumprobiert, aber jeder Versuch endete in Lustlosigkeit.

    Schönen Sonntag noch und schönen Dank.
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von Verzweiflung (24.05.2009 um 19:40 Uhr) Grund: Problem gelöst

  2. #2
    Meister(in) Avatar von Afrael
    Registriert seit
    26.04.2009
    Ort
    NRW
    Alter
    26
    Beiträge
    313
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Ich habe nicht hundertprozentig verstanden, was du willst, aber ich glaube, dein Problem lässt sich durch Klammern an der richtigen Stelle lösen.
    $resp = mysql_query("SELECT * FROM ".$kategorie." WHERE typ='text' AND (text like '%".$eingabe."%' OR tags like '%".$eingabe."%' OR titel like '%".$eingabe."%' OR url like '%".$eingabe."%') ORDER BY id DESC") or die (mysql_error());
    Dabei ist "typ='text'" die eine Bedingung, die zutreffen muss, und "text like...or..." die andere.
    Ich hoffe doch, du validierst $eingabe entsprechend vorher und verhinderst evtl auch, dass der Benutzer % eingibt und sich somit alle Einträge rausgeben lässt?
    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  3. #3
    Teeny
    Themenstarter

    Registriert seit
    24.05.2009
    Beiträge
    22
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Hallo,

    Vielen dank für die zügige Antwort.
    Hat alles wunderbar geklappt!

    Ja, ich prüfe vorher die Eingabe bzw. lass sie abändern, weil ich die Werte per GET übermittel und habe da folgendes eingebaut:

    PHP-Code:
    if($typ == "text"){ $typus "t";}
    if(
    $typ == "video"){ $typus "v";}
    if(
    $typ == "both"){ $typus "v' OR tv='t";}
    if(
    $typ != "text" AND $typ != "video" AND $typ != "both")
    {exit;} 
    Danke für die Hilfe!
    Schönen Sonntag noch.

    PS: $eingabe wird auch gefiltert!
    Geändert von Verzweiflung (24.05.2009 um 19:47 Uhr)

  4. #4
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Verwende dafür am besten ein Array.
    Oder switch oder else.

  5. #5
    König(in) Avatar von crAzywuLf
    Registriert seit
    03.02.2009
    Beiträge
    1.175
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Zitat Zitat von Verzweiflung Beitrag anzeigen
    Hallo,

    Vielen dank für die zügige Antwort.
    Hat alles wunderbar geklappt!

    Ja, ich prüfe vorher die Eingabe bzw. lass sie abändern, weil ich die Werte per GET übermittel und habe da folgendes eingebaut:

    PHP-Code:
    if($typ == "text"){ $typus "t";}
    if(
    $typ == "video"){ $typus "v";}
    if(
    $typ == "both"){ $typus "v' OR tv='t";}
    if(
    $typ != "text" AND $typ != "video" AND $typ != "both")
    {exit;} 
    Danke für die Hilfe!
    Schönen Sonntag noch.

    PS: $eingabe wird auch gefiltert!
    Das könnte man doch auch wunderbar mit einem switch lösen
    PHP-Code:
    <?php
    switch ($typ)
    {
        case 
    "text":
            
    $typus "t";
        break;
        
        case 
    "video":
            
    $typus "v";
        break;
        
        case 
    "both":
            
    $typus "v' OR tv='t";
        break;
        
        default:
            exit(); 
    // wobei ich hier eher eine der anderen Varianten als Standard auswählen würde z.B. $typus = "t";
    }
    ?>
    Gruß crAzywuLf

  6. #6
    Teeny
    Themenstarter

    Registriert seit
    24.05.2009
    Beiträge
    22
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Hi,

    vielen Dank für die Antwort!
    Ja, als Standard werde ich dann "both" nehmen.

    Hat es einen Geschwindigkeitsvorteil wenn ich dies mit dem switch löse? Oder hat dies "nur" einen Übersichtsfaktor?

    Merci,
    Verzweiflung

  7. #7
    Meister(in) Avatar von Afrael
    Registriert seit
    26.04.2009
    Ort
    NRW
    Alter
    26
    Beiträge
    313
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Hat insofern einen Geschwindigkeitsvorteil, als dass der Server bei dir alle vier if-Abfragen abarbeitet, auch wenn die erste schon zutrifft. Ob ein switch schneller wäre als ein else if, kann ich nicht sagen, vermute aber stark, dass ja.
    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  8. #8
    Forum Guru
    Registriert seit
    13.01.2005
    Ort
    Schweiz
    Beiträge
    5.240
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Der Geschindigkeitsunterschied ist minim und eh schlecht messbar.
    Grundsätzlich bevorzuge ich switch-case Anweisungen weil sie a) übersichtlicher sind und b) entweder einen einfacheren Codestil erlauben oder schneller sind. Beispiel:

    PHP-Code:
    switch (get_name_node($input_xml))
      {
      case 
    'mike':
        
    foo();
        break;
      
      case 
    'john':
        
    bar();
        break;

      case 
    'cindy':
        
    bla();
        break;
      } 
    vs.

    PHP-Code:
    if (get_name_node($input_xml) == 'mike')
      
    foo();
    elseif (
    get_name_node($input_xml) == 'john')
      
    bar();
    elseif (
    get_name_node($input_xml) == 'cindy')
      
    bla(); 
    Nehmen wir an wir parsen ein ganzes XML und suchen darin einen bestimmten Namen. Beim switch-case wird das XML nur einmal geparst, was unter Umständen deutlich schneller ist als beim else-if, wo es 3x geparst wird. Man könnte argumentieren, dass man sowas machen könnte:

    PHP-Code:
    $xml_result get_name_node($input_xml);
    if (
    $xml_result == 'mike')
      
    foo();
    elseif (
    $xml_result == 'john')
      
    bar();
    elseif (
    $xml_result == 'cindy')
      
    bla(); 
    was dann auch nur einmal ausgeführt wird. Dann hast du aber einfach eine Variable die du nicht brauchst. Ich persöhnlich code so faul wie möglich und mach es dann lieber so wie in der switch-case Anweisung.

  9. #9
    Teeny
    Themenstarter

    Registriert seit
    24.05.2009
    Beiträge
    22
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Okay, vielen Dank für die ausführlichen Erläuterungen, es ist wohl besser wenn ich es wie vorgeschlagen mache- wieder etwas gelernt.

    Großen Dank, dass ihr euch so die Mühe macht, mir zu helfen! Schönen Mittwoch noch.

  10. #10
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Problem mit MySQL Abfrage

    Ich meine, switch ist nicht schneller, das PHP keine Switch-Table erstellt (Vermutung, ist aber auf jeden Fall nicht schneller).
    Dann eben selber Tabelle erstellen:
    PHP-Code:
    $types = array('text' => 't''video' => 'v')
    $default "v' OR tv='t";
    $typus = isset($types[$typ] ? $types[$typ] : $default); 
    PS:
    PHP-Code:
    define('max'10000);                                           
    function 
    getKey()                                               
    {                                                               
            return 
    chr(97 rand() % 5);                            
    }                                                               
    $t1 microtime(true);                                          
    $array = array('a' => 'Aloa!''b' => 'Bye Bye''c' => 'Ciao''d' => 'Default');
    $default 'Guten Tag!';                                                          
    for(
    $i 0$i != max; ++$i)                                                      
    {                                                                                 
            
    $key getKey();                                                          
            
    $value = isset($array[$key]) ? $array[$key] : $default;                   
    }                                                                                 
    $t2 microtime(true);                                                            
    echo 
    'Hash-Table: ' . ($t2-$t1) . 's                                              
    '
    ;                                                                                
    $t1 microtime(true);                                                            
    for(
    $i 0$i != max; ++$i)                                                      
    {                                                                                 
            
    $key getKey();                                                          
            switch(
    $key)                                                              
            {                                                                         
            case 
    'a':                                                                 
                    
    $value 'Aloa!';                                                 
                    break;                                                            
            case 
    'b':                                                                 
                    
    $value 'Bye Bye';                                               
                    break;                                                            
            case 
    'c':                                                                 
                    
    $value 'Ciao';                                                  
                    break;                                                            
            case 
    'd':                                                                 
                    
    $value 'Default';                                               
                    break;                                                            
            default:                                                                  
                    
    $value 'Guten Tag!';
            }
    }
    $t2 microtime(true);
    echo 
    'Switch: ' . ($t2-$t1) . 's
    '
    ;
    $t1 microtime(true);
    for(
    $i 0$i != max; ++$i)
    {
            
    $key getKey();
            if(
    $key === 'a')
                    
    $value 'Aloa!';
            elseif(
    $key === 'b')
                    
    $value 'Bye Bye';
            elseif(
    $key === 'c')
                    
    $value 'Ciao';
            elseif(
    $key === 'd')
                    
    $value 'Default';
            else
                    
    $value 'Guten Tag!';
    }
    $t2 microtime(true);
    echo 
    'If-Elseif-Else: ' . ($t2 $t1) . 's
    '

    PPS:
    Switch scheint sogar das langsamste zu sein. Trotzdem verwende ich es ab und zu.
    In PHP muss man sagen:
    -elseif ist genauso übersichtlich
    -elseif nimmt beliebige boolsche Bedingungen
    -elseif spart sich das break, wann kommt es schon vor, dass man das break im case weglässt? Recht selten...
    So ein assoziatives Array hat natürlich den Vorteil, dass die Zuordnungen außerhalb des Programmcodes vorgenommen werden können.

    http://files.the-user.org/switchbench.php
    http://files.the-user.org/switchbench.phps
    Geändert von The User (29.05.2009 um 14:38 Uhr) Grund: Link hinzugefügt

Ähnliche Themen

  1. mysql Abfrage
    Von Ivanman im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 20.04.2009, 15:53
  2. MySQL abfrage
    Von minder im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 16
    Letzter Beitrag: 28.01.2009, 22:20
  3. Mysql Abfrage in 2 Ebenen
    Von Gast417 im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 07.10.2007, 15:10
  4. mysql abfrage in html?
    Von im Forum HTML & CSS Forum
    Antworten: 12
    Letzter Beitrag: 27.10.2006, 15:47
  5. PHP Mysql Abfrage Problem bzw Zuordnung
    Von MP im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 08.01.2006, 00:24

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •