kostenloser Webspace werbefrei: lima-city


Nur Daten auswählen, die nur einmal vorkommen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*****d

    Hallo!
    Ich möchte aus einer Tabelle aus einer MySQL-Datenbank alle Werte auslesen, die genau einmal vorkommen.
    Wie geht das? Wäre es mit PHP möglich? Oder direkt mit MySQL? Ich habe bereits gegoogled aber nichts ordentliches gefunden.

    Ich hoffe ihr könnt mir helfen!

    MfG. Simon D.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. suchst du speziell nach werten die ein mal vorkommen oder brauchst du das für die Ausgabe?

    Weil für die Ausgabe kannst du auch "distinct" verwenden

    http://www.w3schools.com/sql/sql_distinct.asp

    ansonsten könntest du die werte selecten und hinten dran ein count laufen lassen. Aus dieser Menge selectest du dann nochmal die Werte wo der Counter nur eins beträgt

    Beitrag zuletzt geändert: 6.8.2014 21:24:32 von ka3ax85
  4. Hi,

    das kannst du mittels COUNT und HAVING realisieren, allerdings sollte die Datenmenge dann nicht zu groß werden, da das irgendwann zu Performanceproblemen führen kann. Je nachdem wie kompliziert die Abfrage ist und wie häufig neue Daten in die Tabellen geschrieben werden kann die Obergrenze schon bei 100 liegen, aber eventuell auch erst bei 50 Millionen, dazu müsste ich wissen, wie deine komplette Abfrage aussieht.

    Hier ein Beispiel, wir haben folgende Tabelle foo:
    +----+-------+
    | id | value |
    +----+-------+
    |  1 |     1 |
    |  2 |     1 |
    |  3 |     2 |
    |  4 |     2 |
    |  5 |     3 |
    +----+-------+

    Jetzt wollen wir jede id finden, die zu einem eindeutigen value gehört. Das können wir machen, indem wir die Abfrage nach value gruppieren und zählen, wie viele gleiche Werte wir finden. Anschließend filtern wir mit HAVING noch heraus, weche Einträge eindeutig sind.
    SELECT `id`, COUNT(`value`) AS 'valuecount'
      FROM `foo`
     GROUP BY `value`
    HAVING `valuecount` = 1


    Alles was eindeutig sein soll wird hierbei in die GROUP BY Klausel aufgenommen, außerdem ist es sinnvoll eine genaue WHERE Klausel aufzunehmen, um die Performance zu steigern, ansonsten kann das wie gesagt sehr langsam werden!

    Wenn du mir deine Tabellenstruktur und deine Ziele sagst kann ich dir dann aber weiterhelfen, falls du Probleme damit hast.

    Mit freundlichen Grüßen

    Beitrag zuletzt geändert: 6.8.2014 21:35:15 von nemoinho
  5. leicht-gekocht

    leicht-gekocht hat kostenlosen Webspace.

    Ich glaube so müsste es gehen. Weiß nicht ob's die beste Möglichkeit ist :nosmile:

    $anfrage = 'SELECT `name` FROM `tabelle`';
    $ergebnis = $SQL->prepare( $anfrage );
    $ergebnis->execute();
    
    $result = $ergebnis -> get_result();
    while ($row = $result -> fetch_assoc()) {
    
    	$meins[$row['name']] = $meins[$row['name']]+1;
    
    }
    
    foreach( $meins as $name => $anzahl ) {
    
    	$array[$anzahl][$name] = "";
    
    }
    
    print_r( $array[1] );


    EDIT: Sorry hatte mich verlesen :wave: mein Fehler!

    Beitrag zuletzt geändert: 6.8.2014 22:58:37 von leicht-gekocht
  6. Autor dieses Themas

    s*****d

    Hallo!
    nemoinho schrieb:
    Hi,

    das kannst du mittels COUNT und HAVING realisieren, allerdings sollte die Datenmenge dann nicht zu groß werden, da das irgendwann zu Performanceproblemen führen kann. Je nachdem wie kompliziert die Abfrage ist und wie häufig neue Daten in die Tabellen geschrieben werden kann die Obergrenze schon bei 100 liegen, aber eventuell auch erst bei 50 Millionen, dazu müsste ich wiessen, wie deine komplette Abfrage aussieht.

    Hier ein Beispiel, wir haben folgende Tabelle foo:
    +----+-------+
    | id | value |
    +----+-------+
    |  1 |     1 |
    |  2 |     1 |
    |  3 |     2 |
    |  4 |     2 |
    |  5 |     3 |
    +----+-------+

    Jetzt wollen wir jede id finden, die zu einem eindeutigen value gehört. Das können wir machen, indem wir die Abfrage nach value gruppieren und zählen, wie viele gleiche Werte wir finden. Anschließend filtern wir mit HAVING noch heraus, weche Einträge eindeutig sind.
    SELECT `id`, COUNT(`value`) AS 'valuecount'
      FROM `foo`
     GROUP BY `value`
    HAVING `valuecount` = 1


    Alles was eindeutig sein soll wird hierbei in die GROUP BY Klausel aufgenommen, außerdem ist es sinnvoll Werte eine genaue WHERE Klausel aufzunehmen, um die Performance zu steigern, ansonsten kann das wie gesagt sehr langsam werden!

    Wenn du mir deine Tabellenstruktur und deine Ziele sagst kann ich dir dann aber weiterhelfen, falls du Probleme damit hast.

    Mit freundlichen Grüßen


    Danke, das ist genau das, was ich gesucht habe!

    MfG. Simon D.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!