AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Counts ausführen

Ein Thema von DGL-luke · begonnen am 1. Aug 2007 · letzter Beitrag vom 2. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Mehrere Counts ausführen

  Alt 1. Aug 2007, 16:27
Datenbank: MySQL • Version: 4.x • Zugriff über: php-mysql-funktionen
Hallo,

ich habe eine Tabelle namens "catlinks" mit drei Feldern, "cat_id", "is_main_cat" und "itm_id".

Ich hätte jetzt gerne die Anzahl aller Datensätze mit cat_id = 'x' und is_main_cat = 1.

D.h.

SELECT count(*) FROM catlinks WHERE is_main_cat=1 AND cat_id=1 gibt mir die Anzahl der Datensätze für Kategorie 1. Ich müsste diese Abfrage für alle Kategorien, die ich habe, einzeln ausführen.

Kann ich das nicht alles in einer Abfrage packen?

SELECT count(*) FROM catlinks WHERE is_main_cat=1 ORDER BY cat_id ASC Ich nehm mal an, das funktioniert so nicht. Wie kann ich der DB sagen, dass sie bitte für mich durch die cat_id werte iterieren soll?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Mehrere Counts ausführen

  Alt 1. Aug 2007, 16:30
Du könntest dementsprechend Gruppieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: Mehrere Counts ausführen

  Alt 1. Aug 2007, 16:32
SQL-Code:
SELECT cat_id,count(*) FROM catlinks
WHERE is_main_cat=1
GROUP BY cat_id
ORDER BY cat_id ASC
//Edit: die cat_id zusätzlich abzufragen macht das Ganze sinniger
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Mehrere Counts ausführen

  Alt 1. Aug 2007, 17:55
ausgezeichnet, DeddyH danke.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Mehrere Counts ausführen

  Alt 2. Aug 2007, 11:05


Ich will jetzt alle Kategorien zusammen mit der Anzahl der Einträge pro Kategorie holen.

Ich hab das mal so verkuddelmuddelt:

SQL-Code:
SELECT cats.id as id, cats.top as top, cats.name as name, cats.desc as desc, COUNT(links.*) as count
FROM ber_cats as cats, ber_catlinks as links
WHERE links.is_main_cat=1 AND cats.id = links.cat_id
GROUP BY cats.id
ORDER BY cats.id ASC
Geht das so? Oder muss ich da n join fabrizieren oder sowas?

Tut mir leid dass ich hier solche Fragen stelle, aber ich hatte leider noch keine Zeit, mich umfassend mit SQL zu beschäftigen
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: Mehrere Counts ausführen

  Alt 2. Aug 2007, 11:11
Gejoined hast Du beide Tabellen ja bereits in der WHERE-Klausel. Allerdings fallen mir 2 Dinge auf:
- Du verwendest Schlüsselwörter als Spaltenbezeichner und als Alias (top und desc).
- Bei einer Abfrage, die Aggregatfunktionen enthält, musst Du nach allen Nicht-Aggregat-Feldern gruppieren.GROUP BY cats.id , cats.top, cats.name, cats.desc
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Mehrere Counts ausführen

  Alt 2. Aug 2007, 11:13
da ich noch in der designphase bin, werd ich die spaltenbezeichner schnell
mal ändern

Aber nochmal danke für die schnelle Hilfe

EDIT:

COUNT(links.*) Das funktioniert wirklich so? toll.

EDIT: Da fällt mir ein... ich hätt ja eigentlich noch n zweites aggregat. nämlich die datensätze in links, bei denen is_main_cat nicht 1 ist (also meistens 0 ).

hm. kann ich da einfach die bedingung is_main_cat=1 weglassen und zusätzlich nach is_main_cat gruppieren?

SQL-Code:
SELECT cats.id as id, cats.parent as parent, cats.name as name, cats.info as info, COUNT(links.*) as count
FROM ber_cats as cats, ber_catlinks as links
WHERE cats.id = links.cat_id
GROUP BY cats.id , cats.parent, cats.name, cats.info, links.is_main_cat
ORDER BY cats.id ASC
Ich nehm mal an, damit verdoppelt sich die anzahl meiner zurückgelieferten datensätze, jeweils einmal mit is_main_cat=1 und einmal mit =0.

Kann ich vielleicht ber_catlinks doppelt joinen?

SQL-Code:
SELECT cats.id as id, cats.parent as parent, cats.name as name, cats.info as info, COUNT(mainlinks.*) as maincount, COUNT(seclinks.*) as seccount
FROM ber_cats as cats, ber_catlinks as mainlinks, ber_catlinks as seclinks
WHERE cats.id = links.cat_id
GROUP BY cats.id, cats.parent, cats.name, cats.info, mainlinks.is_main_cat
ORDER BY cats.id ASC
Das is auch Blödsinn... ich hab einfach keine ahnung von SQL, wenns über ein "SELECT column FROM table WHERE id=x" hinausgeht
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Mehrere Counts ausführen

  Alt 2. Aug 2007, 11:20
Du kannst auch einfach COUNT(*) schreiben, da es sich um einen INNER JOIN handelt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Mehrere Counts ausführen

  Alt 2. Aug 2007, 11:26
okay. hört sich logisch an. und jetzt bitte mein zweites edit voller verworrener SQL-Versuche
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

Re: Mehrere Counts ausführen

  Alt 2. Aug 2007, 11:33
Oha, das wird schon komplizierter. Wenn ich das richtig sehe, möchtest Du eine sog. Kreuztabelle erstellen. Leider hab ich im Moment nicht die Zeit, mir das ausführlich anzusehen (evtl. heute Abend), aber dafür schon mal ein Link. Schau Dir mal in Ruhe an, ob es das ist, was Du beabsichtigst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz