MySQL Abfrage - COUNT
Gabi HH
- datenbank
Hallo zusammen,
ich bastel an einer Abfrage und weiss nicht weiter.
Zur Zeit habe ich eine Abfrage wie folgt:
//Anzahl
$query="SELECT DISTINCT (region) r_1, COUNT(region) anzahl FROM meinetabelle WHERE status BETWEEN '1' AND '10' GROUP BY (region) ";
$result=mysql_query($query,$db);
while ($row = mysql_fetch_array($result))
{
//Alle Regionen
$r[$row['r_1']] = $row['anzahl'];
}
// Anzahl ausgeben z.B. Tegernsee
echo ".$r['Tegernsee'].";
Das klappt auch wunderbar.
Nun möchte ich die Datenbank um die Felder region_2 und region_3 erweitern.
Wie kann ich nun abfragen, wie oft (Summe) "Tegernsee" in Feld region ODER region_2 ODER region_3 vorkommt.
Vielen Dank für eure Hilfe
Warum DISTINCT?
Wie kann ich nun abfragen, wie oft (Summe) "Tegernsee" in Feld region ODER region_2 ODER region_3 vorkommt.
Versteh ich nicht. Was ist (Summe) ?
Soll region_2 und _3 auch in diese Abfrage? Oder bezieht sich diese Frage eher auf den php-Code? Ich les da nicht raus ob du eher php oder SQL machen willst, dein Beispiel enthält ja beides.
Versetz dich mal in "uns" hier und lies deine Frage nochmal ;-)
Ich versuche es mal zu erklären:
Eine Datenbank (mysql) hat u.a die 3 Felder region, region_2 und region_3.
Nun möchte ich wissen, wie oft in den drei Feldern das Wort "Tegernsee" vorkommt.
Mahlzeit Gabi HH,
Eine Datenbank (mysql) hat u.a die 3 Felder region, region_2 und region_3.
Falsch: eine *Tabelle* hat u.a. die drei *Spalten*. Die Datenbank hat nur eins: ein schlechtes Design. Informiere Dich zum Thema "Normalisierung".
Nun möchte ich wissen, wie oft in den drei Feldern das Wort "Tegernsee" vorkommt.
In irgendeinem der drei? Was verstehst Du unter "vorkommen"? Absolute Gleichheit oder willst Du wissen, ob z.B. in der Spalte namens "region" irgendwo ein Text vorkommt, der irgendwo auch das Wort "Tegernsee" enthält?
MfG,
EKKi
Vielen Dank,
immer wieder schön das alle etwas zu sagen haben, aber keine eine Lösung => so ist unsere Mentalität anscheinend.
In eine Tabelle mit den u.a Feldern region, region_2 und region_3 kann ein User seine 3 liebsten Urlaubsregionen eintragen.
Nun möchte ich gerne wissen wieviele User "Tegernsee" in einem der Felder eingetragen haben (analog Ahrtal, Rheingau...).
Bitte keine diskussion ob der Rheingau schön ist => eine Lösung wäre nett.
Habe ja in meinem ersten Posting einen Ansatz für ein feld gemail-dies klappt auch.
Danke für sinnvolle Ansätze
Gabi
moin,
In eine Tabelle mit den u.a Feldern region, region_2 und region_3 kann ein User seine 3 liebsten Urlaubsregionen eintragen.
hier liegt auch das problem, was die abfrage schwieriger macht. gleiche informationen sollten in der gleichen spalte stehen, du hast sie aber über drei spalten verteilt. natürlich kann man das so machen, das bringt aber einige nachteile mit sich, zum beispiel solche probleme mit einer abfragen.
Nun möchte ich gerne wissen wieviele User "Tegernsee" in einem der Felder eingetragen haben (analog Ahrtal, Rheingau...).
dazu hast du von mir schon eine antwort bekommen, wie das zum beispiel in deinem falle gehen könnte. ein andere ansatz wäre es mit UNION ALL.
Habe ja in meinem ersten Posting einen Ansatz für ein feld gemail-dies klappt auch.
mit einer spalte ist es eine ganz andere sache, das problem liegt wie gesagt darin, dass gleiche informstionen über mehrere spalten verteilt wurden.
Ilja
moin,
Das klappt auch wunderbar.
bedinkt, das DISTINCT ist schon mal überflüssig, du benutzt eine gruppierung über die region spalte, da kann es keine "doppelte" werte geben. ändere count(region) in COUNT(*), region musst du nicht klammern, ist überflüssig.
Nun möchte ich die Datenbank um die Felder region_2 und region_3 erweitern.
Wie kann ich nun abfragen, wie oft (Summe) "Tegernsee" in Feld region ODER region_2 ODER region_3 vorkommt.
läßt vermuten, dass dein design unglücklich gewählt ist. wenn es dir aber nur um die ausgabe von Tegernsee geht, läßt sich ein work-around finden. das ist aber imer ein wenig häßlich.
SELECT COUNT(CASE WHEN region = 'Tegernsee' THEN '1' ELSE NULL END) AnzahlRegion,
COUNT(CASE WHEN region_2 = 'Tegernsee' THEN '1' ELSE NULL END) AnzahlRegion_2,
COUNT(CASE WHEN region_3 = 'Tegernsee' THEN '1' ELSE NULL END) AnzahlRegion_3
FROM meinetabelle
WHERE status BETWEEN '1' AND '10'
;
Ilja