MySQL gleiche Felder nur einmal abfragen

MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 12:08:37 von Michael Kuroll

Hi dclpd!

Ich habe eine MySQL Tabelle mit Liedern (nur Interpret/Titel).

Ich moechte alle Interpreten abfragen. (select interpret von tabelle)
Allerdings will ich erreichen, dass gleiche Interpreten nur einmal abgefragt werden.
Interessant waere auch noch die Haeufigkeit von oefters vorkommenden Interpreten.

Geht das direkt im Query oder muss ich das in php mit Arrayfunktionen loesen?

Vielen Dank
lg
Mike

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 12:26:44 von Frank Schenk

Michael Kuroll wrote:

> Hi dclpd!
>
> Ich habe eine MySQL Tabelle mit Liedern (nur Interpret/Titel).
>
> Ich moechte alle Interpreten abfragen. (select interpret von tabelle)
> Allerdings will ich erreichen, dass gleiche Interpreten nur einmal abgefragt werden.
> Interessant waere auch noch die Haeufigkeit von oefters vorkommenden Interpreten.
>
> Geht das direkt im Query oder muss ich das in php mit Arrayfunktionen loesen?
>

Hallo Michael,

schau mal im offiziellen Handbuch zu MySQL ( http://dev.mysql.com ) nach
unter "Tutorials" und "Select-Statement Syntax", besonders "distinct"
und "count()".

Gruss, Frank

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 12:29:06 von Sascha Lebeda

Hallo,

Am 16.11.2004, schrieb Michael Kuroll in de.comp.lang.php.datenbanken:

> Ich moechte alle Interpreten abfragen. (select interpret von tabelle)
> Allerdings will ich erreichen, dass gleiche Interpreten nur einmal abgefragt werden.

Hier kannst du mit LIMIT 1 arbeiten, z.B.

"SELECT * FROM table WHERE interpret LIKE '$search' LIMIT 1"

> Interessant waere auch noch die Haeufigkeit von oefters vorkommenden Interpreten.

Hierbei muss ja irgendwie ein counter mitlaufen, daher wüsste ich jetzt
nicht, ob man das im qury lösen kann. Bin auch kein "mysql-Spezi".

Aber vielleicht weiss ja noch jemand mehr...

hth

Cheers,
Sascha

--
"Wenn man zwei Stunden lang mit einem netten Mädchen zusammensitzt, meint
man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen
Ofen, meint man, es wären zwei Stunden. Das ist Relativität."
(Albert Einstein, dt.-am. Physiker, 1879-1955)

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 12:31:47 von Frank Schenk

Sascha Lebeda wrote:

> Hallo,
>
> Am 16.11.2004, schrieb Michael Kuroll in de.comp.lang.php.datenbanken:
>
>
>>Ich moechte alle Interpreten abfragen. (select interpret von tabelle)
>>Allerdings will ich erreichen, dass gleiche Interpreten nur einmal abgefragt werden.
>
>
> Hier kannst du mit LIMIT 1 arbeiten, z.B.
>
> "SELECT * FROM table WHERE interpret LIKE '$search' LIMIT 1"

Falsch


Frank

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 12:33:26 von Sascha Lebeda

Hallo,

Am 16.11.2004, schrieb Frank Schenk in de.comp.lang.php.datenbanken:

> Falsch

Prima...



Cheers,
Sascha

--
"Wenn man zwei Stunden lang mit einem netten Mädchen zusammensitzt, meint
man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen
Ofen, meint man, es wären zwei Stunden. Das ist Relativität."
(Albert Einstein, dt.-am. Physiker, 1879-1955)

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 16:09:33 von Michael Kuroll

"Frank Schenk" wrote:

> > Ich moechte alle Interpreten abfragen. (select interpret von tabelle)
> > Allerdings will ich erreichen, dass gleiche Interpreten nur einmal abgefragt werden.
> > Interessant waere auch noch die Haeufigkeit von oefters vorkommenden Interpreten.
> >
> > Geht das direkt im Query oder muss ich das in php mit Arrayfunktionen loesen?

> schau mal im offiziellen Handbuch zu MySQL ( http://dev.mysql.com ) nach
> unter "Tutorials" und "Select-Statement Syntax", besonders "distinct"
> und "count()".

Hallo Frank!

Erstmal Danke fuer Deine Antwort.
Ich habe jetzt folgenden Query, der anscheinend auch funktioniert:
SELECT interpret, COUNT(*) FROM songtexte GROUP BY interpret ORDER BY interpret;

Ist das sinnvoll (richtig) so?

Danke
lg
Mike

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 16:29:06 von Frank Schenk

Michael Kuroll wrote:

>
> Erstmal Danke fuer Deine Antwort.
> Ich habe jetzt folgenden Query, der anscheinend auch funktioniert:
> SELECT interpret, COUNT(*) FROM songtexte GROUP BY interpret ORDER BY interpret;
>
> Ist das sinnvoll (richtig) so?

Nun ja, fast:

Anzahl unterschiedlicher Interpreten:

SELECT COUNT(distinct interpret) as anzahl FROM songtexte;


Anzahl der unterschiedlichen Interpreten und Name:

SELECT COUNT(interpret) as anzahl, interpret FROM songtexte group by
interpret;


Alle unterschiedlichen Interpreten:

Select distinct interpret from songtexte;


Distinct und group machen leider meistens recht heftige Kopfschmerzen,
besonders wenn du mal die 10000+ Datensätze überschritten hast.
Vielleicht vertiefst du ja auch deine Datenbankkenntnisse, erweiterst
deine Datenbank und Normalisierst sie. Den Link zum kelz? gibts ja hier
ständig.

Gruss, Frank

P.S.: Warum erweitern? Momentan erscheint dir Geburtsdatum / Todestag /
Geburtsname usw. eines Künstlers vielleicht uninteressant aber eines
Tages ärgerst du dich evtl. Dabei wäre es ganz einfach gewesen, eine
zusätzliche Tabelle Interpreten anzulegen mit id und den Daten, die dann
beliebig veränderbar wäre und wenn sich Prince mal wieder umbenennt
musst du nur 1 Datensatz ändern ;)

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 17:12:30 von Michael Kuroll

"Frank Schenk" wrote:

> > Erstmal Danke fuer Deine Antwort.
> > Ich habe jetzt folgenden Query, der anscheinend auch funktioniert:
> > SELECT interpret, COUNT(*) FROM songtexte GROUP BY interpret ORDER BY interpret;
> > Ist das sinnvoll (richtig) so?

> Nun ja, fast:
> Anzahl unterschiedlicher Interpreten:
> SELECT COUNT(distinct interpret) as anzahl FROM songtexte;

> Anzahl der unterschiedlichen Interpreten und Name:
> SELECT COUNT(interpret) as anzahl, interpret FROM songtexte group by
> interpret;

> Alle unterschiedlichen Interpreten:
> Select distinct interpret from songtexte;

> Distinct und group machen leider meistens recht heftige Kopfschmerzen,
> besonders wenn du mal die 10000+ Datensätze überschritten hast.
> Vielleicht vertiefst du ja auch deine Datenbankkenntnisse, erweiterst
> deine Datenbank und Normalisierst sie. Den Link zum kelz? gibts ja hier
> ständig.

Nochmals Danke (das count hatte ich grade vorhin auf interpret geaendert!).
Ich verstehe Dein Argument, allerdings kommen diese Daten von Usern, das heisst
der User gibt einen Songtext (Interpret, Titel und Text) ein.


Abgesehen davon, wenn Prince (um bei Deinem Beispiel zu bleiben) nun ein Lied herausbringt
dann hat das auch immer Prince gesungen. Auch wenn er ein Jahr spaeter BillG oder anders heisst.
Sprich man redet auch nach der Dritten Namensaenderung noch von Prince - Liedname und nicht von
BillG - Liedname.


lg
Mike

Re: MySQL gleiche Felder nur einmal abfragen

am 16.11.2004 17:26:58 von Frank Schenk

Michael Kuroll wrote:

>
> Abgesehen davon, wenn Prince (um bei Deinem Beispiel zu bleiben) nun ein Lied herausbringt
> dann hat das auch immer Prince gesungen. Auch wenn er ein Jahr spaeter BillG oder anders heisst.
> Sprich man redet auch nach der Dritten Namensaenderung noch von Prince - Liedname und nicht von
> BillG - Liedname.
>

>

Berechtigter Einwand - hatte aber vorhin keine Lust, dem vorzugreifen. ;)

Dann legt man einen neuen Datensatz an und fügt ein Feld siehe_auch
(o.ä.) hinzu und pappt da die ID von Prince rein, so hat man eine
Referenz. Das könnte man stundenlang auswalzen aber da empfehle ich
einfach den Kelz bzw. ein gutes Buch über relationale Datenbanken und
Normierung.

Gruss, Frank

Re: MySQL gleiche Felder nur einmal abfragen

am 18.11.2004 16:58:31 von Helmut Chang

Frank Schenk schrieb:

> ...und wenn sich Prince mal wieder umbenennt
> musst du nur 1 Datensatz ändern ;)

Für Prince muss man ein Nested Set bauen mit nur einem Zweig damit man
ohne rekursive Abfrage auch alle "formerly known as" reinbringt ;-).
Ändern muss man allerdings nix, weil der Interpret bei den alten Titeln
ja trotzdem Prince heißt.

Und jetzt geh ich nachschaun, in welchem Charset "Symbol" enthalten ist
und ob ich deswegen jetzt MySQL neu kompilieren muss ;-).

gruss, heli