Wie viele Einträge mit bestimmter ID

FlorianC

Benutzer
Beiträge
6
Moin liebe Community,

ich würde gerne aus einer Datenbank alle ID's auslesen und zusammenzählen,
wie oft eine bestimmte ID am Lagerort vorhanden ist. In meinem Beispiel also sollte 2x ID 1 im Kühlschrank, 1x ID 2 im Kühlschrank, 1x ID 1 in Kühltruhe und 1x ID 2 im Lager herauskommen:

1644301874108.png

Was wäre hierzu eine passende Abfrage. Bin da leider nicht fündig geworden

LG
 
Werbung:
Zählen ist eine von verschiedenen Aggregat Funktionen, count(), sum(), avg()..
Die Nutzung der Funktionen geht sehr häufig mit der Group by Clause einher.
Es gibt 1000e Beispiele zu Count und Group im Netz.
 
Aber die Werte sollen sich ja ändern. Wie bekomme ich es denn hin, eine Abfrage zu gestalten, das immer der Komplette Bestand abgefragt wird und mir angibt, wie oft es jeden Barcode aktuell gibt?
 
Abfragen listen immer das auf, was da ist. Neue Werte bedeuten neue Ergebnisse. (In dem Moment des Abfrage-Aufrufs aktuell ausgewertet)
Ich weiß nicht, ob Du darauf hinaus willst, aber es gibt neben Tabellen das Konstrukt des Views. Eine benannte Abfrage, die man "öffnen" kann, wie eine Tabelle. Jedes Mal, wenn der View geöffnet oder aktualisiert wird, wird das Ergebnis neu berechnet.
Das ist ein funktionales Merkmal von relationalen Datenbanken.

Selbst wenn es nicht auf Anhieb verständlich ist, nimm Dir ein Tutorial und baue Deine Abfrage entsprechend. Du wirst sehen ..
 
Geht wahrscheinlich eher richtung PHP, wo ich meine Probleme habe...
Ich bin mit der Abfrage soweit, dass ich mir jedes Ergebnis ausgeben lassen kann, würde aber gerne dass er erst schaut, wie viele verschiedene Barcodes da sind und dann eine Folgeabfrage für jeden Barcode wie viele vorhanden sind.
 
würde aber gerne dass er erst schaut, wie viele verschiedene Barcodes da sind und dann eine Folgeabfrage für jeden Barcode wie viele vorhanden sind.
klar, kein Problem, man kann es immer verschlimmern.

Die gezeigte Lösung listet dir alle Barcodes auf (damit hast Du, wie viele verschiedene es gibt) und die Menge jeweils. bei 10 Barcodes alles mit einer Abfrage. Du kannst natürlich Deinen Weg weiter gehen, damit kommst Du auf 11 Abfragen. Schlimmer geht immer!
 
Ich verstehe glaube ich das Problem noch nicht.
Code:
SELECT barcode,lagerort,count(*) AS anzahl FROM tabelle GROUP BY barcode,lagerort ORDER BY barcode,lagerort
 
Vielleicht noch als Nachtrag:

wenn Du (so vermute ich) gerade erst mit dem Thema Datenbanken anfängst, so ist die Wahl mit MySQL vielleicht noch einmal zu prüfen.
Du hast ein Feld 'barcode' mit Werten von 1 und 2. Das sind ganz offensichtlich falsche Werte und dienen hier als Beispiel, schon klar.
Aber wäre es nicht nett, ein 'echtes Barcodefeld' zu haben, welches beim INSERT gleich prüft, ob das ein valider Barcode ist?

Code:
postgres=# create table lager(id int primary key, produkt_barcode ean13);
CREATE TABLE
postgres=# insert into lager values (1,'4008088903684');
INSERT 0 1
postgres=# insert into lager values (1,'4008088903685');
ERROR:  invalid check digit for EAN13 number: "4008088903685", should be 4
LINE 1: insert into lager values (1,'4008088903685');
                                    ^
postgres=#

Der erste Wert ist korrekt, beim zweiten habe ich an der letzten Stelle aus 4 eine 5 gemacht. Das ist die EAN-Prüfziffer, und die Datenbank merkt das und verweigert die Annahme.

Das, und viel, viel mehr, geht mit PostgreSQL. Du wirst, selbst als Anfänger, recht bald merken, daß MySQL recht limitiert ist in dem, was es kann.
 
Vielleicht noch als Nachtrag:

wenn Du (so vermute ich) gerade erst mit dem Thema Datenbanken anfängst, so ist die Wahl mit MySQL vielleicht noch einmal zu prüfen.
Du hast ein Feld 'barcode' mit Werten von 1 und 2. Das sind ganz offensichtlich falsche Werte und dienen hier als Beispiel, schon klar.
Aber wäre es nicht nett, ein 'echtes Barcodefeld' zu haben, welches beim INSERT gleich prüft, ob das ein valider Barcode ist?

Code:
postgres=# create table lager(id int primary key, produkt_barcode ean13);
CREATE TABLE
postgres=# insert into lager values (1,'4008088903684');
INSERT 0 1
postgres=# insert into lager values (1,'4008088903685');
ERROR:  invalid check digit for EAN13 number: "4008088903685", should be 4
LINE 1: insert into lager values (1,'4008088903685');
                                    ^
postgres=#

Der erste Wert ist korrekt, beim zweiten habe ich an der letzten Stelle aus 4 eine 5 gemacht. Das ist die EAN-Prüfziffer, und die Datenbank merkt das und verweigert die Annahme.

Das, und viel, viel mehr, geht mit PostgreSQL. Du wirst, selbst als Anfänger, recht bald merken, daß MySQL recht limitiert ist in dem, was es kann.
Vielen dank für den coolen input.

Mit der Überprüfung eines Barcodes ist schon eine coole Sache, aber ich werde wohl für Produkte ohne Barcodes Fiktive Barcode-Werte anlegen müssen von daher fällt dies leider flach.
Das ganze mit PostgreSQL werde ich mir auf jeden Fall für zukünftige Projekte überlegen.

könntest du mir zufällig nochmal mit meiner PHP-Abfrage helfen?
Problem sieht folgendermaßen aus:
1644326109822.png

Code:
    $query_lager = (" SELECT barcode,lagerort,count(*) AS anzahl FROM lagerbestand WHERE lagerort = 'K├╝hlschrank' GROUP BY barcode,lagerort ORDER BY barcode");
    $erg_lager = mysqli_query($connection,$query);



<details>
                            <summary>Testlager</summary>           
                            <table>
                            <?php   
                            while ($row = mysqli_fetch_assoc($erg_lager))
                            {
                                
                                    echo "<table border=\"3\">";
                                    $tabelleerstellt = 1;
                                    ?>
                                    <th bgcolor="black" style="color: DarkOrange";>Barcode</th>
                                    <th bgcolor="black" style="color: DarkOrange";>Lagerort</th>
                                    <th bgcolor="black" style="color: DarkOrange";>Menge</th>
                                    <tr>
                                        <td bgcolor="silver"> < <?=$row['barcode']; ?> > </td>
                                        <td bgcolor="green"><?=$row['lagerort']; ?></td>
                                        <td bgcolor="silver"><?=$row['anzahl']; ?></td>
                                    </tr>
                                    <?php
                                    
                                
                                
    
                            }
                            echo "</table>";
                            ?>
                        </details>
 
Hab es schon lösen können. eine Abfrage war falsch
Vielen dank für den coolen input.

Mit der Überprüfung eines Barcodes ist schon eine coole Sache, aber ich werde wohl für Produkte ohne Barcodes Fiktive Barcode-Werte anlegen müssen von daher fällt dies leider flach.
Das ganze mit PostgreSQL werde ich mir auf jeden Fall für zukünftige Projekte überlegen.

könntest du mir zufällig nochmal mit meiner PHP-Abfrage helfen?
Problem sieht folgendermaßen aus:
Anhang anzeigen 1874

Code:
    $query_lager = (" SELECT barcode,lagerort,count(*) AS anzahl FROM lagerbestand WHERE lagerort = 'K├╝hlschrank' GROUP BY barcode,lagerort ORDER BY barcode");
    $erg_lager = mysqli_query($connection,$query);



<details>
                            <summary>Testlager</summary>          
                            <table>
                            <?php  
                            while ($row = mysqli_fetch_assoc($erg_lager))
                            {
                               
                                    echo "<table border=\"3\">";
                                    $tabelleerstellt = 1;
                                    ?>
                                    <th bgcolor="black" style="color: DarkOrange";>Barcode</th>
                                    <th bgcolor="black" style="color: DarkOrange";>Lagerort</th>
                                    <th bgcolor="black" style="color: DarkOrange";>Menge</th>
                                    <tr>
                                        <td bgcolor="silver"> < <?=$row['barcode']; ?> > </td>
                                        <td bgcolor="green"><?=$row['lagerort']; ?></td>
                                        <td bgcolor="silver"><?=$row['anzahl']; ?></td>
                                    </tr>
                                    <?php
                                   
                               
                               
   
                            }
                            echo "</table>";
                            ?>
                        </details>
 
Ich verstehe glaube ich das Problem noch nicht.
Code:
SELECT barcode,lagerort,count(*) AS anzahl FROM tabelle GROUP BY barcode,lagerort ORDER BY barcode,lagerort
Hallo Ukulele,

das mit den Barcodes ist zwar nett gemeint, funktioniert aber nicht, da:

1) Ein Artikel kann mehrere unterschiedliche Barcodes haben, also müssen die sep. 1:n abgelegt werden.
2) Es gibt Artikel die von verschiedenen Herstellern mit dem gleichen Barcode geliefert werden, also muss der Hersteller noch zwingend mit in die Abfrage.


LG Bernd
 
Werbung:
1) Ein Artikel kann mehrere unterschiedliche Barcodes haben, also müssen die sep. 1:n abgelegt werden.
2) Es gibt Artikel die von verschiedenen Herstellern mit dem gleichen Barcode geliefert werden, also muss der Hersteller noch zwingend mit in die Abfrage.
Sry aber wo steht das? Ich kann mir doch solche Sachen nicht aus den Fingern saugen. Die gezeigten Daten definieren drei Spalten und fünf Datensätze, thats it. Meine Abfrage sollte aus meiner Sicht das gesuchte Ergebnis liefern.

Für alles andere so wie eine Fragenstellung gilt: Shit in, shit out :) Ich würde z.B. nie in einer normalisierten Tabelle eine Spalte lager_id nennen und in der selben Tabelle eine Spalte lagerort führen die offensichtlich keine reine Tabelle für "Läger" darstellt sondern auch noch Artikel-Atribute wie Barcodes aufnimmt. So gesehen müsste das erstmal normalisiert werden und in zwei Tabellen aufgeteilt.
 
Zurück
Oben