Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
mit count, oder wie?! [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mit count, oder wie?!


 
tom0201
18-09-2001, 12:47 
 
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

 
pekka
18-09-2001, 15:56 
 
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]

 
tom0201
18-09-2001, 16:08 
 
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

 
pekka
18-09-2001, 16:16 
 
Grad was gefunden:

SELECT count (DISTINCT Region) AS anzahlRegionen, count(DISTINCT stadt) AS anzahlStaedte FROM tabelle WHERE land = "D"

zumindest laut Handbuch!

 
tom0201
18-09-2001, 16:55 
 
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

 
tom0201
18-09-2001, 16:59 
 
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

 
pekka
18-09-2001, 17:39 
 
Hmmm....??? Das COUNT (DISTINCT) stammt aus dem Manual! Komische Sache. Weiss da jemand mehr drüber??? Funktioniert count(distinct) mit der BDE in Delphi?

 
tom0201
18-09-2001, 18:28 
 
weder in der BDE von Delphi, im SQL-Explorer von Delphi oder im phpmyadmin

ist leider so!!!

 
tom0201
18-09-2001, 18:35 
 
übrigens,

hat jemand Erfahrung mit Interbase und PHP

Mist, verliere das eigentliche Problem aus den Augen!!!

Also, SELECT .... irgendetwas (s.o.)

 
pekka
18-09-2001, 18:59 
 
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

 
JoelH
19-09-2001, 10:45 
 
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 :(

 
tom0201
19-09-2001, 10:58 
 
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

 
pekka
19-09-2001, 13:02 
 
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

 
Titus
21-09-2001, 00:06 
 
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.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:29 Uhr.