PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Zählen gleicher Datensätze (http://www.selfphp.de/forum/showthread.php?t=8869)

Spower 19.10.2004 13:44:54

Zählen gleicher Datensätze (2 Spalten)
 
Hallo Leute!

Kann mir jemand vielleicht bei folgenden Problem helfen. Ich suche eine mySQL query , die mir gleiche Datensätze zählt. Allerdings können sich die Daten in zwei Spalten unterscheiden!

Tabelle:
Spalte A | Spalte B
12 | b
14 | a
23 | a
12 | b
34 | d
43 | e
54 | a
12 | a
14 | a
14 | a

Ergebnis:
Datensatz (12-b) 2x
Datensatz (12-a) 1x
Datensatz (14-a) 3x
Datensatz (34-d) 1x
u.s.w.

Ich bekomm es einfach nicht hin, dass er mit die Datensätz zählt. Will ja nicht, dass er alle "a" oder alle "12" zusammenfasst! Kann mir jemand helfen!

Danke im voraus

feuervogel 19.10.2004 15:23:18

SELECT spalteA, spalteB, COUNT( * ) AS amount FROM table JOIN table ON spalteA = spalteA AND spalteB = spalteB GROUP BY spalteA

so in etwa?

Spower 19.10.2004 16:05:40

Hab's mittlerweile selber rausgefunden :-)
 
Ersmal Danke Feuervogel! Weiß zwar nicht, ob dein query auch geht, aber trotzdem Danke.

Für alle die es interessiert:
SELECT spalteA, spalteB, COUNT(spalteA) as number FROM table GROUP BY spalteA, spalte B ORDERED BY spalteA DESC

Das ausschlaggebende war der Ausdruck:
GROUP BY spalteA !!,!! spalteB

FrankyH 24.09.2006 15:25:26

Erweiterungsfrage (AW: Zählen gleicher Datensätze)
 
Hallo
ich hab da mal ne Erweiterungsfrage

Der Befehl
PHP-Code:

SELECT COUNT(spalteFROM zeile 

gibt mir ja nun die Gesamtanzahl aller in dieser Spalte befindlichen Werte aus.
Beispielsweise dann 12. Diese 12 setzt sich bei mir dann allerdings aus 9 Festwerten und "3 leeren Werten" zusammen.

Erläuterung. Manche Felder sind mit NULL gefüllt und manche sind halt leer. Diese leeren Felder werden in einer allgemeinen Abfrage zu den Festwerten dazugerechnet. Das soll so nicht sein.
Kann mir jemand sagen, wie die Abfrage lauten muss, um nur die Festwerte zu counten?

Als Festwert, die der User in die db Schreiben darf habe ich nur 3 verschiedene Werte, nämlich die Farben: Rot, Gruen, Blau.

Normalerweise wird doch dafür geschrieben,
PHP-Code:

SELECT (farbenFROM zeile WHERE id <> Rot and id <> Gruen and id <> Blau

Kommt hier Count Befehl dazu, läuft das so nicht mehr. Kann mir da jemand auf die Sprünge helfen?

Thx Franky

feuervogel 24.09.2006 15:48:57

AW: Zählen gleicher Datensätze
 
... WHERE `spalte` IS NOT NULL AND `spalte` != ''

so vielleicht?

feuervogel 24.09.2006 15:49:52

AW: Erweiterungsfrage (AW: Zählen gleicher Datensätze)
 
Zitat:

Zitat von FrankyH
Kommt hier Count Befehl dazu, läuft das so nicht mehr. Kann mir da jemand auf die Sprünge helfen?

meistens die dazugehörige fehlermeldung des mysql-servers, die du mit mysql_error() bekommst :-)

FrankyH 24.09.2006 16:26:22

AW: Zählen gleicher Datensätze
 
Dank dir erstmal für den Lösungsversuch, es liegt immer noch an der Abfrage im allgemeinen.
Das Ding hier läuft problemlos, wenn alle Zeilen der Spalte entweder einen Festwert oder den Wert NULL haben. Ist eine Zelle jedoch leer, gibts den Fehler siehe unten. Hier erstmal das gesamte Konstrukt:
PHP-Code:

<?php
$sqlhost
='xxx'
$username='xxx'
$passwort='xxx'
$database='xxx'
$link mysql_connect($sqlhost$username$passwort);
mysql_select_db($database$link);
$abfrage "SELECT COUNT(farben) FROM settings";
$result mysql_query($abfrage,$link);
$count mysql_result($result,0);
?>

Wenn ich ne Fehlerhafte Abfrage produziere, bekomme ich den Hinweis
"mysql_result(): supplied argument is not a valid MySQL result resource on line 10"
Also ein Systaxproblem in Zeile 8 bei der Abfrage. ODer lieg ich da falsch?

Wenn ich die Abfrage um deinen Vorschlag erweitere bekomme ich immer noch das falsche Ergebnis, wo die leeren Felder mit addiert werden.
Bei mir ist grad eh Try and Error angesagt, aber das dauert halt und gebracht hats noch nicht das Erhoffte.

Als Beispiel sieht die Spalte Farben übrigens so aus.

Code:

Farbe
NULL
ROT
BLAU
BLAU
ROT
NULL
NULL

GRUEN
NULL

ROT
NULL
GRUEN

Die Abfrage oben bringt mir 9 als Ergebnis, obwohl nur 7 Farben eingetragen sind. Die beiden leeren Felder werden also mit addiert.
Es gibt allerdings keine Chance, den Eintragsvorgang zu verändern, so dass leere Felder gar nicht erst entstehen können, daher muss das wohl über eine weitere Abfrage gemacht werden.
Ich setz mich mal noch ne Weile hin, kann ja so schwierig nicht sein.
Wenn mir trotzdem jemand noch die Syntax der Abfrage im genauen Wortlauf anbieten kann, nehm ich die natürlich ;-)

Thx again
Franky

feuervogel 24.09.2006 16:38:09

AW: Zählen gleicher Datensätze
 
was erhälst du für eine ausgabe, wenn du statt

$result = mysql_query($abfrage,$link);

das schreibst:

$result = mysql_query($abfrage,$link) or die( mysql_error() );

FrankyH 24.09.2006 16:47:25

AW: Zählen gleicher Datensätze
 
Hallo Feuervogel,

ich habs jetzt nochmals reinkopiert und erweitert wie du geraten hast.
Damit erhalte ich keine Fehlermeldung mehr und die Zahl (Ergebnis) stimmt. Wenn ich mir das aber so anschaue, kann das nur entweder ein Hochkommata oder ein anderer Tippfehler meinerseits gewesen sein...

Hier mal das lauffähige vollständige Konstrukt für alle die sowas auch mal benötigen.

PHP-Code:

$sqlhost='xxx'
$username='xxx'
$passwort='xxx'
$database='xxx'
$link mysql_connect($sqlhost$username$passwort);
mysql_select_db($database$link);
$abfrage "SELECT COUNT(spalte) FROM zeile WHERE `spalte` IS NOT NULL AND `spalte` != ''";
$result mysql_query($abfrage,$link) or die( mysql_error() );
## $result = mysql_query($abfrage,$link);
$count mysql_result($result,0); 

Thx Franky


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:10:45 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.