tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von ph612
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
175
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ph612 ph612 ist offline Grünschnabel
    Registriert seit
    Mar 2009
    Beiträge
    4
    Ich habe eine Tabelle (tabelle). Diese Tabelle hat mehrere Felder (id, person, fruechte).
    Es gibt mehrere Werte in 'fruechte', diese sind mit Komma getrennt. z.B.:
    id
    1
    person
    Peter
    fruechte
    Apfel,Banane,Birne
    id
    2
    person
    Paul
    fruechte
    Kirsche,Apfel,Banane
    id
    3
    person
    Robert
    fruechte
    Apfel,Pfirsich
    Nun möchte ich eine Auflistung machen (10 Einträge in Liste), die sortiert ist nach der Frucht, die am meisten verwendet wurde. z.B.:
    • Apfel (3)
    • Banane (2)
    • Birne (1)
    • Kirsche (1)
    • Pfirsich (1)
    • ...

    Wie kann ich das machen?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Mit str_word_count() und array_count_values

    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
    <?php 
    $data = array(
        array(  'id' => 1,
                'person' => 'Peter',
                'fruechte' => 'Apfel,Banane,Birne'),
        array(  'id' => 2,
                'person' => 'Paul',
                'fruechte' => 'Kirsche,Apfel,Banane'),
        array(  'id' => 3,
                'person' => 'Robert',
                'fruechte' => 'Apfel,Pfirsich ')
        );
     
    //Liste der durchsuchenden Feldern
    $searchFields = array('fruechte');
        
    //für jede [key]=>[value] Kombination die Funktion countWords aufrufen
    array_walk_recursive($data, 'countWords', $searchFields);
     
    //Nach Häufigkeit absteigend sortieren
    arsort($wordList);
     
    //Liste Ausgeben
    foreach($wordList as $word => $count) echo "{$word}: {$count}<br />";
     
     
    /**
     * Callback Function um die Wörter in den Arrays zu zählen
     * @param $item
     * @param $key
     * @param $searchFields
     */
    function countWords($item, $key, $searchFields){
        if(in_array($key, $searchFields)){
            //Die Wörter auflisten und zählen -> array([wort]=>anzahl)
            $thisWords = array_count_values(str_word_count($item, 1));
            //jeder Eintrag der gefundenen Wörter der wordList hinzufügen
            array_walk($thisWords, 'addToWordList');
        }    
    }
       
    /**
     * Wort der Wörterliste hinzufügen
     * @param $count
     * @param $word
     */
    function addToWordList($count, $word){
        $GLOBALS['wordList'][$word] = $GLOBALS['wordList'][$word]+($count);
    }    
    ?>
    ph612 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hallo,

    das einfachste wäre es, deine Tabelle den Datenbank Normalformen entsprechend zu modellieren.
    Das heißt, du lagerst das Feld "fruechte" in eine extra Tabelle aus.

    Bsp:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Person
    ----------
    name: varchar
     
     
    Fruechte
    ----------
    bezeichnung: varchar
     
     
    PersonFruechte:
    ---------
    person: varchar (references Person.name)
    frucht: varchar (references Fruechte.bezeichnung)

    Dann kannst du dir mit der folgenden Query die Daten holen:
    Code sql:
    1
    
    SELECT COUNT(*), frucht FROM PersonFruechte GROUP BY frucht;


    Die andere Variante, alles so zu lassen wie es ist, wäre um einiges aufwändiger. Du müsstest dir die Früchte holen, in eine Array aufteilen und dann die entsprechenden Variablen mit PHP hochzählen lassen. // Edit: so wie es yaslaw vorschlägt


    Gruß
    BK
     
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  4. #4
    ph612 ph612 ist offline Grünschnabel
    Registriert seit
    Mar 2009
    Beiträge
    4
    @ yaslaw

    Wie lautet das $data in Form einer mysql_query?
    queicherius bedankt sich. 

Ähnliche Themen

  1. GridView und Filterung
    Von Razorhawk im Forum .NET Web und Kommunikation
    Antworten: 1
    Letzter Beitrag: 15.06.10, 11:24
  2. Antworten: 8
    Letzter Beitrag: 25.07.09, 19:05
  3. Kinderschutz / Content-Filterung
    Von Soapp im Forum Internet, DSL & Flatrate
    Antworten: 0
    Letzter Beitrag: 28.03.07, 19:29
  4. Filterung eines Arrays
    Von Paula im Forum PHP
    Antworten: 4
    Letzter Beitrag: 19.04.06, 13:38
  5. Antworten: 3
    Letzter Beitrag: 10.12.05, 13:21