php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.02.2008, 14:43  
Neuer Benutzer
 
Registriert seit: 04.02.2008
Beiträge: 10
erdnah
Standard SELECT-Problem

Hallo,

ich habe ein für viele von Euch sicherlich recht einfach zu lösendes Problem:
Ich habe z.B. folgend Tabelle:
Code:
Spalte 1|Spalte 2|Spalte 3
--------------------------
0       |ABC     |12.22
1       |ABD     |5.42
0       |DDD     |0
0       |ABC     |0
1       |ABD     |4.88
1       |ABC     |2.21
...
Nun möchte ich die Zeilen daraus filtern, deren Wert in Spalte 2 mindestens zwei Mal vorkommt. Dies sind hier ABC (kommt 3 Mal vor) und ABD (kommt 2 Mal vor). DDD sollte folglich nicht Teil der Ergebnismenge sein. Ergebnis des SELECT:
Code:
Spalte 1|Spalte 2|Spalte 3
--------------------------
0       |ABC     |12.22
1       |ABD     |5.42
0       |ABC     |0
1       |ABD     |4.88
1       |ABC     |2.21
...
Wie kann ich so etwas hinbekommen?

Viele Grüße,
erdnah
erdnah ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.02.2008, 14:52  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.034
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Code:
SELECT
	spalte1
	spalte2
	spalte3 
FROM
	tabelle
GROUP BY
	spalte2
HAVING
	COUNT(spalte2) > 1;
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 04.02.2008, 14:58  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Naja fast, vermutlich eher mit einem Subselect:

Code:
SELECT
  spalte1, spalte2, spalte3
FROM
  (
  SELECT spalte1
  FROM tabelle
  GROUP BY spalte2
  HAVING COUNT(spalte2) >= 2
  )
Zergling-new ist offline   Mit Zitat antworten
Alt 04.02.2008, 15:00  
Neuer Benutzer
 
Registriert seit: 04.02.2008
Beiträge: 10
erdnah
Standard

lazydog, vielen Dank für die rasche Antwort!

Leider bekomme ich dann folgendes Ergebnis:
Code:
Spalte 1|Spalte 2|Spalte 3
--------------------------
0       |ABC     |12.22
1       |ABD     |5.42
Ich verliere also drei Zeilen, die ich ganz gerne noch in der Ergebnismenge hätte
erdnah ist offline   Mit Zitat antworten
Alt 04.02.2008, 15:03  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Sorry mein Query stimmt hinten und vorne nicht. Nimm doch lazydog's Query als Sub-SELECT:
Code:
SELECT * FROM tabelle WHERE spalte2 IN
  (
  -- lazydogs sub-select
  )
PS: Willkommen hier in unserem Forum
Zergling-new ist offline   Mit Zitat antworten
Alt 04.02.2008, 15:14  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.034
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von erdnah
Ich verliere also drei Zeilen, die ich ganz gerne noch in der Ergebnismenge hätte
Da hast du natürlich recht, ich habe deine Frage zu wenig genau gelesen. Da brauchst du tatsächlich einen Subselect
Code:
SELECT
   spalte1,
   spalte2,
   spalte3
FROM
   tabelle
WHERE
   spalte 2 IN(
      SELECT 
         spalte2 
      FROM
         tabelle
      GROUP BY
         spalte2
      HAVING
         COUNT(spalte2) > 1
   );
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 04.02.2008, 15:25  
Neuer Benutzer
 
Registriert seit: 04.02.2008
Beiträge: 10
erdnah
Standard

Danke für die Begrüßung

Gut, mit
Code:
SELECT t2.*
FROM
  (SELECT * FROM test GROUP BY spalte2 HAVING COUNT(spalte2) > 1) AS t1
LEFT JOIN test AS t2
ON t1.spalte2 = t2.spalte2
funktioniert es sogar, nur leider sind in der "richtigen" Tabelle etwa 150.000 Zeilen, wo die Anfrage Ewigkeiten dauert und ich bisher noch nicht die Muße hatte bis zum Ende abzuwarten

@Edit: Lazydogs Lösung bringt auch das richtige Ergebnis... wahrscheinlich muss ich mir die Daten einfach einmal ziehen und dann am Besten neu in eine Tabelle schreiben, um dann weiter damit zu arbeiten...
erdnah ist offline   Mit Zitat antworten
Alt 04.02.2008, 15:59  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.034
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Wenn du schon Probleme mit der Performance hast, solltest du niemals SELECT * FROM schreiben, sondern nur die Attribute abfragen, die du wirklich brauchst. Das ist im Subselect z.B. nur spalte2. Ausserdem wäre es gut, wenn du darauf einen Index legen würdest.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 04.02.2008, 16:07  
Neuer Benutzer
 
Registriert seit: 04.02.2008
Beiträge: 10
erdnah
Standard

Wow, das Ersetzen des * durch "spalte2" hat wahnsinnig was gebracht, das habe ich auch total übersehen... einen Index habe ich nun auch auf die Spalte gelegt. Vielen Dank!!
erdnah ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
schleifen problem amsele1986 PHP Tipps 2008 3 21.06.2008 17:45
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
[Erledigt] Mysql Insert Select + Concat Hu5eL Datenbanken 14 10.06.2008 10:39
Problem mit SELECT IF r-ene Datenbanken 2 07.02.2008 10:22
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
SELECT AS geht bei AVG net cyberholic Datenbanken 0 04.05.2006 09:43
Mysql SELECT Abfrage -- Problem mit LIMIT djrace Datenbanken 2 01.05.2006 12:58
Problem beim Auswerten eines select Feldes FireFIghter PHP Tipps 2006 3 23.04.2006 15:28
SELECT problem Fatal Error PHP Tipps 2006 5 21.04.2006 16:31
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
Problem mit select (AND, OR und Like gemixt) pixelcut Datenbanken 3 11.05.2005 10:14
[Erledigt] SELECT Problem PHP Tipps 2005 6 08.03.2005 21:10
[Erledigt] SELECT ... LIKE Problem Datenbanken 10 05.03.2005 13:21
mysql SELECT problem yoshy Datenbanken 7 20.02.2005 00:46
[Erledigt] Select & Update Syntax Problem! Datenbanken 3 14.12.2004 18:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
having count spalte 2, mysql attribut das mindestens 2 mal vorkommt auswählen

Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.