Archiv verlassen und diese Seite im Standarddesign anzeigen : mit count, oder wie?!
Hi, alle zusammen,
hab ein Problem und komme nicht auf die Lösung.
habe diese Tabelle test (sieht scheisse aus, ich weiss, aber keine Zeit)
|----|------|----|
|Land|Region|Orte|
|----|------|----|
|E | a | aa|
|E | a | ab|
|E | a | ac|
|E | b | ba|
|E | b | bb|
|D | c | ca|
|D | d | da|
|D | d | db|
|NL | e | ea|
|----|------|----|
brauche eine Ausgabe wieviele Regionen und wieviele Orte
im jeweiligen Land sind
sollte so aussehen (auch scheisse, s.o.)
|----|-------------|-----------|
|Land|Anzahl Region|Anzahl Orte|
|----|-------------|-----------|
|E | 2 | 5 |
|D | 2 | 3 |
|NL | 1 | 6 |
|----|-------------|-----------|
wer hat DIE Idee
Sitze schon seid Tagen dran und bin ziemlich frustriert
function Zaehlen($land)
{
$gefundeneRegionen = array();
$anzahlRegionen = 0;
$anzahlStaedte = 0;
$query = mysql_query("SELECT * FROM tabelle WHERE Land = '$land'");
$anzahlStaedte = mysql_num_rows($query); // Jeder Datensatz ist eine andere Stadt, oder?
while ($datensatz = mysql_fetch_object($query))
{
if (in_array($datensatz->region, $gefundeneRegionen) == false) // Wenn Region schonmal vorgekommen, nicht mehr mitzählen. Ansonsten Anzahl Regionen hochsetzen und Region zu Array hinzufügen.
{ $anzahlRegionen++;
array_push($datensatz->region, $gefundeneRegionen);
} // end if
} // end while
echo "Land $land <br>";
echo "Anzahl Städte: $anzahlStaedte <br>";
echo "Anzahl Regionen: $anzahlRegionen <br>";
} // end function
Vielleicht nicht die einfachstmögliche Lösung, aber sie sollte es tun. Vielleicht hat ein mySQL-Guru ein SQL-Statement für die Sache?
[Editiert von pekka am 18-09-2001 um 15:59]
Hi pekka,
danke für die function.
Hatte zwar auch eine benutzt, aber deine ist besser.
Viel lieber wäre mir zwar ein 'SELECT ...', aber
funktioniert wohl auch so.
Weiss irgend jemand, wo ich mein Problem posten kann,
um ein SQL-Statement als Lösung zu bekommen???
Besten Dank im Vorraus
tom
Grad was gefunden:
SELECT count (DISTINCT Region) AS anzahlRegionen, count(DISTINCT stadt) AS anzahlStaedte FROM tabelle WHERE land = "D"
zumindest laut Handbuch!
Schaaade!
funktioniert leider nicht. Hab's gerade im
phpmyadmin ausprobiert.
Fehlermeldung:
SQL-query:
SELECT count (DISTINCT region) AS anzahlRegionen, count(DISTINCT ort) AS anzahlOrte FROM hotel WHERE land = "001"
MySQL said: You have an error in your SQL syntax near '(DISTINCT region) AS anzahlRegionen, count(DISTINCT ort) AS anzahlOrte FROM hote' at line 1
Back
Hi pekka,
by the way
mein Admin-Tool für die Web-Anwendung läuft unter Delphi.
Ein SQL kann ich ohne Anpassung in beiden Welten benutzen (php und Delphi). Ne Funktion müsste ich immer umbasteln.
Danke
Hmmm....??? Das COUNT (DISTINCT) stammt aus dem Manual! Komische Sache. Weiss da jemand mehr drüber??? Funktioniert count(distinct) mit der BDE in Delphi?
weder in der BDE von Delphi, im SQL-Explorer von Delphi oder im phpmyadmin
ist leider so!!!
übrigens,
hat jemand Erfahrung mit Interbase und PHP
Mist, verliere das eigentliche Problem aus den Augen!!!
Also, SELECT .... irgendetwas (s.o.)
Meine Doku auf der Platte ist schon einige Monate alt, in der aktuellen auf mysql.com findet sich auch kein Wort mehr von DISTINCT, dafür ein Kommentar dazu (siehe ganz unten auf der verlinkten Seite). Vielleicht hilft Dir aber folgender Link weiter, dort wird genau dein Problem behandelt:
http://www.mysql.com/doc/C/o/Counting_rows.html
hmm,
kannste mir mal sagen wo das im Manual steht ? Ich hätte es nämlich auch so versucht ==>
SELECT land, count(DISTINCT region) , count(DISTINCT orte) FROM test group by land
leider frisst er das DISTINCT nicht mir ist aber nicht klar warum er das nicht tut :(
Hi JoelH,
ich hab auch schon diverse Syntaxen, äh Schreibweisen
ausprobiert.
Bisher gings nur mit:
SELECT land, count(region), count(orte) FROM test group by land
Zeigt dann aber nur die Anzahl der Sätze je Land an!!
Und mit nem Join aus die gleiche Tabelle sieht das Ergebnis ganz seltsam aus. Viel mehr Sätze und viel mehr Zeit.
Ich probier trotzdem mal weiter. Muss ja irgendwie gehen.
Bye
Original geschrieben von JoelH
hmm,
kannste mir mal sagen wo das im Manual steht ? Ich hätte es nämlich auch so versucht ==>
SELECT land, count(DISTINCT region) , count(DISTINCT orte) FROM test group by land
leider frisst er das DISTINCT nicht mir ist aber nicht klar warum er das nicht tut :(
Also im Manual steht folgendes:
COUNT(DISTINCT expr,[expr...])
Returns a count of the number of different non-NULL values:
select COUNT(DISTINCT results) from student;
In MySQL you can get the number of distinct expression combinations that don't contain NULL by giving a list of expressions. In ANSI SQL you would have to do a concatenation of all expressions inside CODE(DISTINCT ..).
Im Download-Manual auf manual-split/manual_Reference.html#Functions
machs doch in zwei verschiedenen Queries. Ist zwar nicht gaanz so komfortabel, funktioniert aber 100%ig:
SELECT Land, count (DISTINCT Region) AS anzahlRegionen FROM tabelle group by Land;
SELECT Land, count(DISTINCT stadt) AS anzahlStaedte FROM tabelle group by Land;
Nach jeder Query eine Schleife; die beiden Schleifen bauen dir ein Array land=>array(anzahlRegionen,anzahlStaedte) zusammen und in einer dritten Schleife gibst du's aus.
|
-
- |