Ankündigung

Einklappen
Keine Ankündigung bisher.

ASCII-Codes in DB-Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ASCII-Codes in DB-Abfrage

    Hallo,

    versuche vergeblich eine DB-Abfrage mit ASCII-Codes zu erstellen.

    Zuerst baue ich mir ein Array mit den Buchstaben des Alphabets + ä,ö,ü zusammen:
    PHP-Code:
    $tmp = array();
    for (
    $i 65$i <= 90$i++) {
        
    $tmp[] = "&#" $i;
        if (
    $i == 65) {                //A
            
    $tmp[] = "Ä";
        } else if (
    $i == 79) {        //O
            
    $tmp[]  = "Ö";
        } else if (
    $i == 85) {        //U
            
    $tmp[] = "Ü";
        }

    Anschließend lasse ich mir das (zur Kontrolle) ausgen:
    PHP-Code:
    echo '<pre>' print_r($tmptrue) . '</pre>'
    was mir folgendes liefert:
    PHP-Code:
    Array
    (
       [
    0] => A
       
    [1] => Ä
       usw
    .

    Dann durchlaufe ich in einer Schleife das Array und starte für jeden Buchstaben eine SQL-Abfrage:
    PHP-Code:
    foreach ($tmp as $letter) {
        echo 
    $letter;
        
    $sql 'SELECT COUNT(*) FROM names WHERE name like "' $letter '%"';

    hier habe ich mir wieder zur Kontrolle alle Buchstaben ausgeben lassen - diese sind richtig.

    Leider steht dann in der Variable $sql aber folgendes:
    PHP-Code:
    SELECT COUNT(*) FROM names WHERE name like "$#65%"
    usw
    Warum wird der ASCII-Code nicht interpretiert???
    Rauskommen sollte:
    PHP-Code:
    SELECT COUNT(*) FROM names WHERE name like "A%" 

  • #2
    Weil Entitäten erst im HTML-Kontext interpretiert werden. Die Lösung ist ohnehin schlecht, Abfrage zu Hauf in einer Schleife absetzen macht man nicht. Du kannst das Ziel ganz leicht durch eine Gruppierung der Datensätze erreichen.

    Kommentar


    • #3
      @nikosch
      Danke für Deine schnelle Antwort.
      Kannst Du mir zeigen wie das geht?

      Kommentar


      • #4
        Je nach erzieltem Ergebnis:
        Code:
        SELECT * , LEFT(`name`,1) FROM `names ` GROUP BY LEFT(`name`,1)
        bzw.
        Code:
        SELECT * , LEFT(`name`,1) AS letter FROM `names` ORDER BY letter

        Kommentar


        • #5
          @nikosch
          Vielen Dank!!

          Doch beide Abfragen helfen mir nicht.
          Ich will nicht
          - jeweils den ersten Eintrag zu einem Buchstaben (was Abfrage 1 liefert)
          - alle Einträge gruppiert nach erstem Buchstaben (was Abfrage 2 liefert)

          Ich muss wissen, wieviele Eintärge es zu einem gegebenen Buchstaben gibt.

          Kommentar


          • #6
            Ach ja, das Count hatte ich vergessen. Das kannst Du ganz einfach in die erste Abfrage einbauen COUNT(name) oder COUNT(id) z.B.

            Kommentar


            • #7
              @nikosch
              Vielen Dank, das hat funktioniert!

              Kommentar

              Lädt...
              X