Frage zu count(*) / multiple abfrage

hallo,

ich habe mal folgendes problem:

gegeben ist eine spalte, welche textfelder/begriffe beinhalten !!

ich will mit einer „einzigen abfrage“ verschiedene konstante wörter aus dieser einzelnen spalte (TEXT) auslesen und zählen.

für das ‚SuchWort1‘ habe ich folgende lösung

SELECT count(text) AS SuchWort1 FROM tabelle WHERE id=‚xyz‘ AND (text LIKE ‚%Suchwort1%‘) GROUP BY id

nun habe ich als ausgabe die häufigkeit meines ‚SuchWortes1‘

wie realisiere ich nun aber in einer einzigen abfrage sowohl die ausgabe der häufigkeit von ‚Suchwort1‘ als auch eines ‚Suchwortes2‘ usw. … ‚SuchwortesX‘ ???

ich bedanke mich schon einmal im voraus,

gruß

anna

hallo,

ich habe mal folgendes problem:

gegeben ist eine spalte, welche textfelder/begriffe beinhalten
!!

ich will mit einer „einzigen abfrage“ verschiedene konstante
wörter aus dieser einzelnen spalte (TEXT) auslesen und zählen.

für das ‚SuchWort1‘ habe ich folgende lösung

SELECT count(text) AS SuchWort1 FROM tabelle WHERE id=‚xyz‘
AND (text LIKE ‚%Suchwort1%‘) GROUP BY id

nun habe ich als ausgabe die häufigkeit meines ‚SuchWortes1‘

vor allem hast du den leser verwirrt, denn id bezeichnet zumeist einen eindeutigen identifier, sprich es sollte genau 1 zeile geben, auf die id=‚xyz‘ matched. weiterhin ist in obigem ausdruck group by vollkommen obsolet, da du sowhl mit als auch ohne genau 1 ergebnis bekommst - und zwar die anzahl der zeilen, auf die mit dem suchbegriff und der id xyz zutrifft.

wie realisiere ich nun aber in einer einzigen abfrage sowohl
die ausgabe der häufigkeit von ‚Suchwort1‘ als auch eines
‚Suchwortes2‘ usw. … ‚SuchwortesX‘ ???

ich bedanke mich schon einmal im voraus,

geht nicht, du kannst nur einmal zaehlen - wieviele zeilen auf deine klausel zutreffen. du kannst hoechstens eine gesamtsumme bilden

hint: stell datanbankanfragen doch im datenbanken-brett…

Hallo,

ich würde dir empfehlen die Frage in Datenbanken>SQL Datenbankprogrammierung zu stellen.

Im Allgemeinen kann man in SQL Unterabfragen erstellen. Mir fällt spontan die UNION ein (nein, nicht die CDU/CSU :smile:). In deinem speziellen Fall wäre es:

Select count(*) as mycount from table where id=„xyz“ UNION ALL Select count(*) as mycount from table where id=„xzy“;

Das Ergebnis sieht folgendermassen aus:

mycount
--------
100
200

Also gibt es 100 Zeilen mit der id xyz und 200 mit der id xzy.

Es müsste auch anders gehen, obwohl nie ausprobiert:

select (select count(*) as count1 from table where id=„xyz“),(select count(*) as count2 from table where id=„xzy“);

theoretisch müsste dann folgendes ergebnis zu sehen sein:

count1 count2
------------------
100 200

Vielleicht muss man ein „TOP 1“ oder „LIMIT 0,1“ jeweils dahinter setzen, ich werd es ausprobieren. Aber das Prinzip sieht so aus.

Gruss, Omar Abo-Namous

http://www.islaminhannover.de

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ich hab nun im SQL-Forum gesucht und folgenden sehr guten Beitrag gesehen:

http://www.wer-weiss-was.de/cgi-bin/www/service.fpl?..

In deinem Fall wäre es folgendermassen:

SELECT sum(if(test=„xyz“,1,0)) AS SuchWort1, sum(if(test=„xzy“,1,0)) AS SuchWort2 FROM tabelle ;

Gruss, Omar Abo-Namous

hallo,

blöder fehler !! hab in die falsche rubrik gepostet !

danke für die tips !!

ID ist natürlich ne RubrikID, sorry für die unkorrektheit …

gruß

anne

hi,

vielen dank, habs noch ein wenig umgeschrieben aber das prinzip ist mir jetzt klar. es funktioniert !! hat mir sehr geholfen, THX :o)

anne