Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

while

0 views
Skip to first unread message

Sigbert Helle

unread,
Feb 12, 2023, 11:37:24 AM2/12/23
to
Hallo Leute,
mir fehlt mal wieder die richtige Idee:
Aus einer Datenbank lese ich Datensätze aus und will die Anzahlen
wissen, die zu bestimmten Jahren gehören. Das klappt auch:
========
$Jahr = 1827;
while($Jahr < 1913)
{
$statement = $daba->prepare("SELECT COUNT(*) AS anzahl FROM lit1 WHERE
Jahr = $Jahr");
$statement->execute();
$row = $statement->fetch();
if ($row['anzahl'] > 0)
{
echo "<span class=\"wichtig\">".$Jahr.": </span>";
echo "<span class=\"wichtig\">".$row['anzahl']."</span><br />";
}
$Jahr++;
}
============
In einem Verzeichnis liegen zu jedem Datensatz passende Dateien, deren
Namen sich aus den IDs herleiten, also z.B. 564.jpg, 564-D.pdf etc.
Ich bräuchte nun zu jedem Jahr die Anzahl der Datensätze, zu denen solch
eine (oder mehrere) Datei(en) existieren. Die Anzahl der Dateien selbst
interessiert mich nicht.
Ich hab rumexperimentiert mit while($ID > 0) komme da aber nicht weiter.
Also konkreter: Welche while-Schleife muss ich wo in die obere Schleife
einbauen? Oder ist dieser Ansatz schon Blödsinn?

Gruß
Sigbert

Stefan Froehlich

unread,
Feb 12, 2023, 12:23:33 PM2/12/23
to
On Sun, 12 Feb 2023 17:37:22 Sigbert Helle wrote:
> Aus einer Datenbank lese ich Datensätze aus und will die Anzahlen
> wissen, die zu bestimmten Jahren gehören. Das klappt auch:
> ========
> $Jahr = 1827;
> while($Jahr < 1913)
> {
> $statement = $daba->prepare("SELECT COUNT(*) AS anzahl FROM lit1 WHERE
> Jahr = $Jahr");
> $statement->execute();
> $row = $statement->fetch();
> if ($row['anzahl'] > 0)
> {
> echo "<span class=\"wichtig\">".$Jahr.": </span>";
> echo "<span class=\"wichtig\">".$row['anzahl']."</span><br />";
> }
> $Jahr++;
> }
> ============

Das ist zwar jetzt nicht Deine Frage, aber ich würde das
(teure) SQL-Statement nicht in einer Schleife ausführen, sondern
statt dessen die WHILE-Bedingung als GROUP formulieren; ungetestet:

#v+
$statement = $daba->prepare("SELECT Jahr, COUNT(*) AS anzahl FROM
lit1 GROUP BY Jahr ORDER BY Jahr");
#v-

Iterieren kannst Du dann auch (billig) über die Ergebnisse.

> In einem Verzeichnis liegen zu jedem Datensatz passende Dateien,
> deren Namen sich aus den IDs herleiten, also z.B. 564.jpg,
> 564-D.pdf etc. Ich bräuchte nun zu jedem Jahr die Anzahl der
> Datensätze, zu denen solch eine (oder mehrere) Datei(en)
> existieren. Die Anzahl der Dateien selbst interessiert mich nicht.

Was sind "die IDs"? Ein Attribut in Deiner Tabelle, das im obigen
Beispiel noch nicht enthalten ist?

In diesem Fall wirst Du mit den Aggregatfunktionen nicht
weiterkommen, sondern wohl oder übel zuerst alle IDs ermitteln und
dann das Verzeichnis auf passende Dateinamen durchsuchen müssen.

> Ich hab rumexperimentiert mit while($ID > 0) komme da aber nicht
> weiter. Also konkreter: Welche while-Schleife muss ich wo in die
> obere Schleife einbauen? Oder ist dieser Ansatz schon Blödsinn?

Es wird am Ende ziemlich sicher nur eine Schleife sein.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Murklig? Murkliger als Stefan!? Wer's glaubt!
(Sloganizer)
0 new messages