MySQL-Syntax-Fehler?

MySQL-Syntax-Fehler?

am 24.08.2005 20:56:55 von Michael Praast

Moin,

jetzt raff ich garnix mehr. Ein Script, welches unverändert
bisher sauber lief meldet mir bei einem Eintrag in eine
Datenbank plötzlich einen Fehler (vorab sorry für die Länge):

INSERT INTO `ergebnis` (`id`, `vv`, `vsp`, `wvsp`, `v1`, `v2`,
`v3`, `v4`, `sg1`, `sg2`, `sg3`, `sg4`, `g`, `disq`, `vdh`, `vdhjugend`,
`resvdh`, `resvdhjugend`, `cacib`, `rescacib`, `caca`, `rescaca`,
`jugendbester`, `cac`, `rcac`, `cacjugend`, `rcacjugend`, `vetvdh`,
`resvetvdh`, `bh`, `br`, `bis`, `big`, `bob`, `bps`, `bnl`, `bjs`,
`bvs`, `bund`, `bundjugend`, `europ`, `europjugend`, `fciw`,
`fciwjugend`, `fcie`, `fciejugend`, `kft`, `kftjugend`, `lux`,
`luxjugend`, `bunda`, `bundajugend`, `kluba`, `klubajugend`, `interra`,
`interrajugend`, `show`, `dog`, `klasse`, `zuechter`, `halter`) VALUES
('', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1',
'0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0, '0', '0',
'1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '16', '5', '15',
'13')

You have an error in your SQL syntax near '0', '0', '1', '0', '0', '1',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '' at line 1

Kann mir jemand verraten, was da schief läuft? Wie gesagt lief das
Script vorher problemlos. Der Aberwitz: das Script zum Updaten der
bestehenden Daten arbeitet mit gleicher (bzw. ähnlicher) Syntax
immer noch klaglos (Updatestring ähnlich lang).

Ratlos
Michael

Re: MySQL-Syntax-Fehler?

am 24.08.2005 21:10:43 von Michael Praast

"Michael Praast" meißelte:
>jetzt raff ich garnix mehr. ...

Nur als Hinweis, warum ich hier frage: Das Script ist ein PHP-Script,
díe Datenbank eine MySQL-DB. PHP bastelt mir den String für den
(bisher prima funktionierend habenden) Eintrag zusammen.

Dies nur vorsichtshalber, bevor jemand frägt, was das mit PHP oder
MySQl zu tun habe...

Best regards
Michael

Re: MySQL-Syntax-Fehler?

am 24.08.2005 21:57:27 von Kai Ruhnau

Michael Praast wrote:
> jetzt raff ich garnix mehr. Ein Script, welches unverändert
> bisher sauber lief meldet mir bei einem Eintrag in eine
> Datenbank plötzlich einen Fehler (vorab sorry für die Länge):
>
> INSERT INTO `ergebnis` (`id`, `vv`, `vsp`, `wvsp`, `v1`, `v2`,
> `v3`, `v4`, `sg1`, `sg2`, `sg3`, `sg4`, `g`, `disq`, `vdh`, `vdhjugend`,
> `resvdh`, `resvdhjugend`, `cacib`, `rescacib`, `caca`, `rescaca`,
> `jugendbester`, `cac`, `rcac`, `cacjugend`, `rcacjugend`, `vetvdh`,
> `resvetvdh`, `bh`, `br`, `bis`, `big`, `bob`, `bps`, `bnl`, `bjs`,
> `bvs`, `bund`, `bundjugend`, `europ`, `europjugend`, `fciw`,
> `fciwjugend`, `fcie`, `fciejugend`, `kft`, `kftjugend`, `lux`,
> `luxjugend`, `bunda`, `bundajugend`, `kluba`, `klubajugend`, `interra`,
> `interrajugend`, `show`, `dog`, `klasse`, `zuechter`, `halter`) VALUES
> ('', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1',
> '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0, '0', '0',
> '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
> '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '16', '5', '15',
> '13')
>
> You have an error in your SQL syntax near '0', '0', '1', '0', '0', '1',
> '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '' at line 1
>
> Kann mir jemand verraten, was da schief läuft? Wie gesagt lief das
> Script vorher problemlos. Der Aberwitz: das Script zum Updaten der
> bestehenden Daten arbeitet mit gleicher (bzw. ähnlicher) Syntax
> immer noch klaglos (Updatestring ähnlich lang).

Warum suchst du nicht nach dem Vorkommen des Ausschnitts aus der
Fehlermeldung. Üblicherweise - auch hier - ist der Fehler direkt davor;
es fehlt ein einzelnes Anführungszeichen.

Ansonsten erlaube mir die Bemerkung, dass dein Datenbank-Desing kaputt
ist. Durchnummerierte Spalten-Namen sind ein >98%iges Zeichen dafür. Zum
anderen frage ich mich, ob `halter` und `vdhjugend` tatsächlich soviel
gemeinsam haben, wie du über deine Tabellendefinition suggerierst.

Grüße
Kai

--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.

Re: MySQL-Syntax-Fehler?

am 24.08.2005 23:56:52 von Michael Praast

"Kai Ruhnau" schrieb:
>>Kann mir jemand verraten, was da schief läuft? Wie gesagt lief das
>>Script vorher problemlos. Der Aberwitz: das Script zum Updaten der
>>bestehenden Daten arbeitet mit gleicher (bzw. ähnlicher) Syntax
>>immer noch klaglos (Updatestring ähnlich lang).
>
>Warum suchst du nicht nach dem Vorkommen des Ausschnitts aus der
>Fehlermeldung.

Hatte ich getan und dank Betriebsblindheit keinen Fehler gefunden.
Daher auch meine Anfrage hier.

>Üblicherweise - auch hier - ist der Fehler direkt davor;
>es fehlt ein einzelnes Anführungszeichen.

*selbstpatsch* Das wars, sogar mehrfach noch im Script. Danke Kai.
Selbst nach mehrstündiger Suche, Ausdruck aller möglichen Vergleiche
usw habe ich das nicht entdeckt. Fragt sich nur, warum das vorher
klaglos lief. Nunja, egal, läuft jetzt wieder, prima! Danke!

>Ansonsten erlaube mir die Bemerkung, dass dein Datenbank-Desing kaputt
>ist. Durchnummerierte Spalten-Namen sind ein >98%iges Zeichen dafür.

Durchnummeriert bei Spaltennamen wie "vv"<->"bob"? Erzähl mehr drüber,
ich lerne gern dazu. Ich vermute, du zielst auf anderes ab?

>Zum
>anderen frage ich mich, ob `halter` und `vdhjugend` tatsächlich soviel
>gemeinsam haben, wie du über deine Tabellendefinition suggerierst.

Nö 'halter' ist wie 'zuechter' eine Referenz auf die Tabelle person,
so wie 'show', 'dog' und 'klasse' ebenfalls nur auf andere Tabellen
mit den Werten verweisen. `vdhjugend` ist dagegen eine Bewertung.
Mir ist schon klar, dass meine Problembeschreibung zu kurz war, um
diese Zusammenhänge (die andererseits für die Anfrage irrelevant
waren) zu erkennen.

Gegeben ist Hund XYZ, der bei Ausstellung ABC irgendwelche Titel erringt.
Vermerkt werden: Ausstellung, Hund, Zuechter, Halter, Titel sowie die
Klasse, in der der Hund derzeit startete. Da die einzig konstante
Klamotte dabei die Titel _dieser_ Ausstellung sind erlaube ich mir,
alles andere dynamisch anzulegen. Der Hund kann älter werden (andere
Klasse), die Ausstellungen und Bewertungen sind sicher immer anders,
aber gehören immer zum Hund. Der wiederum hat einen konstanten Züchter,
der einerseits Züchter ist, aber auch wiederum aktueller Halter sein
kann (oder eben auch nicht). Bei der Bewertung kann der Hund nur 0/1
haben (hat Titel `vdhjugend` erreicht=1 oder nicht=0).

Best regards
Michael

Re: MySQL-Syntax-Fehler?

am 25.08.2005 08:14:06 von Kai Ruhnau

Michael Praast wrote:
> "Kai Ruhnau" schrieb:
>
>>Ansonsten erlaube mir die Bemerkung, dass dein Datenbank-Desing kaputt
>>ist. Durchnummerierte Spalten-Namen sind ein >98%iges Zeichen dafür.
>
>
> Durchnummeriert bei Spaltennamen wie "vv"<->"bob"? Erzähl mehr drüber,
> ich lerne gern dazu. Ich vermute, du zielst auf anderes ab?

Ja, ich meine v1-4 oder sg1-4.
Ich empfehle
http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
Für Informationen über Relationale Datenbanken und insbesondere
Normalisierung.

Grüße
Kai

--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.

Re: MySQL-Syntax-Fehler?

am 25.08.2005 09:36:15 von Michael Praast

"Kai Ruhnau" schrieb:
>>Durchnummeriert bei Spaltennamen wie "vv"<->"bob"? Erzähl mehr drüber,
>>ich lerne gern dazu. Ich vermute, du zielst auf anderes ab?
>
>Ja, ich meine v1-4 oder sg1-4.

V1, V2, ... sind Bewertungen bei Hundeshows, 'V'=Vorzüglich,
'Sg' = Sehr gut, z.B.:
|Offene Klasse (Rüden)
|Lilianor Luke Skywalker: V1, VDH, CACIB, CAC, BR, BOB
|
|Domenikus Heavens Flash: Sg2, Res.VDH
|
|Tom Jones vom Litzlbach: V3
|...

Alles von `vv` bis `interrajugend` sind Bewertungen, die Daten zu
`show`, `dog`, `klasse`, `zuechter`, `halter` stecken in anderen
Tabellen (z.B. show: id, ort, datum, name, richter, aktiv).

Best regards
Michael

Re: MySQL-Syntax-Fehler?

am 25.08.2005 10:03:13 von Fabian Schladitz

Michael Praast schrieb:
> "Kai Ruhnau" schrieb:
>=20
>>>Durchnummeriert bei Spaltennamen wie "vv"<->"bob"? Erzähl mehr drü=
ber,
>>>ich lerne gern dazu. Ich vermute, du zielst auf anderes ab?
>>
>>Ja, ich meine v1-4 oder sg1-4.
>=20
>=20
> V1, V2, ... sind Bewertungen bei Hundeshows, 'V'=3DVorzüglich,
> 'Sg' =3D Sehr gut, z.B.:
> |Offene Klasse (Rüden)
> |Lilianor Luke Skywalker: V1, VDH, CACIB, CAC, BR, BOB
> |
> |Domenikus Heavens Flash: Sg2, Res.VDH
> |
> |Tom Jones vom Litzlbach: V3
> |...
>=20
> Alles von `vv` bis `interrajugend` sind Bewertungen, die Daten zu
> `show`, `dog`, `klasse`, `zuechter`, `halter` stecken in anderen
> Tabellen (z.B. show: id, ort, datum, name, richter, aktiv).

Also kann ein Hund bei einer Show mehrere dieser Bewertungen=20
nebeneinander erhalten? Er sit also gleichzeitig Vorzüglich und Sehr=20
gut? Wenn nicht, gehört das in eine Spalte.

Und kann er bei einer Show in mehreren Altersgruppen stecken, die du=20
vorher beschrieben hast? Wenn nicht, dann sollte das eine Spalte sein.

Es empfiehlt sich zusätzlich, die Spaltennamen auszuschreiben, um keine=
=20
Mißverständnisse zu erzeugen.
Und wenn du überall Integer-Werte nimmst (obwohl sich wohl oft BOOLEAN =

oder zumindest ENUM anbieten), dann lass doch bitte die Hochkommata weg=20
- das macht deinem MySQL nur unnötige Arbeit.

--=20
HTH,
Fabian

Re: MySQL-Syntax-Fehler?

am 25.08.2005 12:58:09 von Michael Praast

"Fabian Schladitz" schrieb:
Michael Praast schrieb:
>>Alles von `vv` bis `interrajugend` sind Bewertungen, die Daten zu
>>`show`, `dog`, `klasse`, `zuechter`, `halter` stecken in anderen
>>Tabellen (z.B. show: id, ort, datum, name, richter, aktiv).
>
>Also kann ein Hund bei einer Show mehrere dieser Bewertungen
>nebeneinander erhalten? Er sit also gleichzeitig Vorzüglich und Sehr
>gut? Wenn nicht, gehört das in eine Spalte.

Oha. Ich versuchs mal zu erklären:

Jüngste(6-9 Monate): VV, Vsp, Wvsp
ab Jugendklasse: V1-V4, Sg1-Sg4, g, disq
Davon immer nur eins.

Zusätzlich gibt es weitere Bewertungen:
Jugend: VDH-Jugend, Res.VDH-Jugend, Jugendbester, Jgd.CAC, Jgd.Res.CAC,
Ältere: VDH, Res.VDH, CACIB, Res.CACIB, CACA, Res.CACA, CAC, Res.CAC,
Veteranen: Vet.VDH, Res.Vet.VDH
Alle außer Jüngste: BH, BR, BIS, BIG, BOB
Davon können jeweils mehrere zutreffen, Beispiel:
|Lilianor Luke Skywalker: V1, VDH, CACIB, CAC, BR, BOB

Und dann hätten wir noch 14 Titel von "Best puppy in show" bis
"FCI-Weltsieger". 55 unterschiedliche, teils prima kombinierbare
Bewertungen und Titel insgesamt. :-)

Ich hatte überlegt, zumindest - wie von dir empfohlen - die
Bewertungen und Titel zu trennen, aber da das eh nur eine
privat betreute Website ist und keine Gelder fließen, wollte
ich mir den Stress nicht auch noch antun.

>Und kann er bei einer Show in mehreren Altersgruppen stecken, die du
>vorher beschrieben hast? Wenn nicht, dann sollte das eine Spalte sein.

Bei _einer_ Show nicht. Hmm. Nene, das lass ich so, wie ichs habe,
denn im Moment kann ich bei jeder Show (Tabelle show) einfach den
Namen (Tabelle dog) hernehmen und je nach Alter (Tabelle klasse) in
die entsprechende Klasse dazusortieren. Ansonsten hab ich den Hund
vielleicht einmal pro Klasse in der DB, was ja unsinnig wäre.

>Es empfiehlt sich zusätzlich, die Spaltennamen auszuschreiben, um keine
>Mißverständnisse zu erzeugen.

fciw -> FCI-Weltsieger (reicht für mich, im PHP stehen auch genug
Kommentare dazu).

>Und wenn du überall Integer-Werte nimmst (obwohl sich wohl oft BOOLEAN
>oder zumindest ENUM anbieten), dann lass doch bitte die Hochkommata weg
>- das macht deinem MySQL nur unnötige Arbeit.

Ohne Hochkommata nahm mir die DB die Werte nicht ab, was mich auch
sehr wunderte (in anderen Scripten tat es das nämlich). Muss ich
nochmal schauen ob der Fehler da vielleicht nur bei mir lag.

Best regards
Michael

Re: MySQL-Syntax-Fehler?

am 26.08.2005 00:17:23 von Kai Ruhnau

Michael Praast wrote:
> "Fabian Schladitz" schrieb:
> Oha. Ich versuchs mal zu erklären:
>
> Jüngste(6-9 Monate): VV, Vsp, Wvsp
> ab Jugendklasse: V1-V4, Sg1-Sg4, g, disq
> Davon immer nur eins.

Spätestens hier ist die Datenbank nicht normalisiert.
"Davon immer nur eins" wird nicht über 13 Spalten gelöst, die du
nichteinmal mit NULL als "Nicht genutzt" markieren kannst.

Eine Tabelle (a), in denen diese 13 Typen drinstehen.
Die aktuelle Tabelle (b) schmeißt alle 13 Felder raus.
Eine Tabelle, die (a) und (b) verknüpft und mit einem UNIQUE-Constraint
auf dem Primary-Key (a) versehen ist. Dann schenkt dir die Datenbank das
"immer nur eins" automagisch.

> Zusätzlich gibt es weitere Bewertungen:
> Jugend: VDH-Jugend, Res.VDH-Jugend, Jugendbester, Jgd.CAC, Jgd.Res.CAC,
> Ältere: VDH, Res.VDH, CACIB, Res.CACIB, CACA, Res.CACA, CAC, Res.CAC,
> Veteranen: Vet.VDH, Res.Vet.VDH
> Alle außer Jüngste: BH, BR, BIS, BIG, BOB
> Davon können jeweils mehrere zutreffen, Beispiel:
> |Lilianor Luke Skywalker: V1, VDH, CACIB, CAC, BR, BOB

Lehn dich mal zurück und lies die oberen Zeilen. Löse dich davon, dass
du weißt, was da steht. Lies es einfach mal laut vor...

> Und dann hätten wir noch 14 Titel von "Best puppy in show" bis
> "FCI-Weltsieger". 55 unterschiedliche, teils prima kombinierbare
> Bewertungen und Titel insgesamt. :-)

Bitte informiere dich darüber, was Normalisierung ist und was das mit
deinem derzeitigen Datenbank"design" (nicht) zu tun hat.

> Ich hatte überlegt, zumindest - wie von dir empfohlen - die
> Bewertungen und Titel zu trennen, aber da das eh nur eine
> privat betreute Website ist und keine Gelder fließen, wollte
> ich mir den Stress nicht auch noch antun.

Glaube mir und anderen, dass das was du da gerade baust _deutlich_ mehr
Stress verursacht, als einen Richtiges[tm] Datenbankdesign.

>>Und kann er bei einer Show in mehreren Altersgruppen stecken, die du
>>vorher beschrieben hast? Wenn nicht, dann sollte das eine Spalte sein.
>
>
> Bei _einer_ Show nicht. Hmm. Nene, das lass ich so, wie ichs habe,
> denn im Moment kann ich bei jeder Show (Tabelle show) einfach den
> Namen (Tabelle dog) hernehmen und je nach Alter (Tabelle klasse) in
> die entsprechende Klasse dazusortieren. Ansonsten hab ich den Hund
> vielleicht einmal pro Klasse in der DB, was ja unsinnig wäre.

Bitte informiere dich darüber, was Normalisierung ist und was das mit
deinem derzeitigen Datenbank"design" (nicht) zu tun hat.

Grüße
Kai

--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.

Re: MySQL-Syntax-Fehler?

am 26.08.2005 00:25:52 von Kai Ruhnau

Kai Ruhnau wrote:
> Michael Praast wrote:
>
>> Oha. Ich versuchs mal zu erklären:
>>
>> Jüngste(6-9 Monate): VV, Vsp, Wvsp
>> ab Jugendklasse: V1-V4, Sg1-Sg4, g, disq
>> Davon immer nur eins.
>
>
> Spätestens hier ist die Datenbank nicht normalisiert.
> "Davon immer nur eins" wird nicht über 13 Spalten gelöst, die du
> nichteinmal mit NULL als "Nicht genutzt" markieren kannst.
>
> Eine Tabelle (a), in denen diese 13 Typen drinstehen.
> Die aktuelle Tabelle (b) schmeißt alle 13 Felder raus.

Bis hierher ja.

> Eine Tabelle, die (a) und (b) verknüpft und mit einem UNIQUE-Constraint
> auf dem Primary-Key (a) versehen ist. Dann schenkt dir die Datenbank das
> "immer nur eins" automagisch.

Das ist (datenbankdesigntechnisch) Quatsch.
Du erstellst in (b) ein Feld, das auf Tabelle (b) verweist.

Eine Alternative dazu ist die "Standarddenormalisierung":
Aus den 13 Spalten wird eine einzelne von Typ ENUM. Die Werte, die
dieser ENUM annehmen kann, sind die 13 Spaltennamen.

ist-zu-spät-Grüße
Kai

--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.

Re: MySQL-Syntax-Fehler?

am 27.08.2005 21:09:58 von Michael Praast

"Kai Ruhnau" schrieb:
>Kai Ruhnau wrote:
>> Michael Praast wrote:
>>> Jüngste(6-9 Monate): VV, Vsp, Wvsp
>>> ab Jugendklasse: V1-V4, Sg1-Sg4, g, disq
>>> Davon immer nur eins.
>>
>>Spätestens hier ist die Datenbank nicht normalisiert.

Mir ist das durchaus bewußt gewesen.

>>Eine Tabelle (a), in denen diese 13 Typen drinstehen.
>>Die aktuelle Tabelle (b) schmeißt alle 13 Felder raus.
>
>Bis hierher ja.

Eine Tabelle [a] mit den Bewertungen ist klar, mit (b) meinst
du eine Tabelle, die neben einer ID (ob die hier gebraucht würde?)
noch das Ergebnis (Referenz auf [a]) enthält (1=vv, 2=vsp,...)?

>>Eine Tabelle, die (a) und (b) verknüpft und mit einem UNIQUE-Constraint
>>auf dem Primary-Key (a) versehen ist. Dann schenkt dir die Datenbank
>>das "immer nur eins" automagisch.
>
>Das ist (datenbankdesigntechnisch) Quatsch.
>Du erstellst in (b) ein Feld, das auf Tabelle (b) verweist.

Auf [b], also sich selbst? Wie das?

>Eine Alternative dazu ist die "Standarddenormalisierung":
>Aus den 13 Spalten wird eine einzelne von Typ ENUM. Die Werte, die
>dieser ENUM annehmen kann, sind die 13 Spaltennamen.

Örks. Mit ENUM habe ich bisher garnicht gearbeitet.

Ok, was haben wir bisher:
dog - ID, Hundename
person - ID, Name (des Züchters bzw. aktuellen Halters)
klasse - mögliche Klassen
ausstellung - ID, Datum, Name der Schau, Ort, Richter
ergebnis - meine lange Tabelle mit den vielen Daten
bilder - ID, Ausstellung, Pic-URL, Kommentar, Rang der Anzeige

Was ihr "empfehlt":
dog - ID, Hundename
person - ID, Name (des Züchters bzw. aktuellen Halters)
klasse - mögliche Klassen
ausstellung - ID, Datum, Name der Schau, Ort, Richter
ergebnis - ID, Hund, Klasse, Züchter, Halter, Ausstellung
bilder - ID, Ausstellung, Pic-URL, Kommentar, Rang der Anzeige
_neu_
[a] - mögliche Bewertungen (s.o., ähnlich 'klasse')
[b] - s.o.
[c] - mögliche Titel (s.o., ähnlich 'klasse')
[d] - errungene Titel

Konsequent ist dies, sicher. Werde ich im Hinterkopf für den
nexten Umbau behalten. 10 Tabellen für so ein kleines Anzeige-
ergebnis ist Hammer...

Danke für die Tipps und Hilfen!

Best regards
Michael
PS: Noch etwas zum Thema "ausschreiben der Bezeichnungen": Verträgt
eine MySQL-Tabelle überhaupt Bezeichnungen wie "Best puppy in show"
oder "Bester Niederläufer" - in dieser Schreibweise?

Re: MySQL-Syntax-Fehler?

am 27.08.2005 21:18:37 von Michael Praast

"Michael 'Ingrid' Praast" meißelte
>Was ihr "empfehlt":
>dog - ID, Hundename
>person - ID, Name (des Züchters bzw. aktuellen Halters)
>klasse - mögliche Klassen
>ausstellung - ID, Datum, Name der Schau, Ort, Richter
>ergebnis - ID, Hund, Klasse, Züchter, Halter, Ausstellung
>bilder - ID, Ausstellung, Pic-URL, Kommentar, Rang der Anzeige
>_neu_
>[a] - mögliche Bewertungen (s.o., ähnlich 'klasse')
>[b] - s.o.
>[c] - mögliche Titel (s.o., ähnlich 'klasse')
>[d] - errungene Titel

Mit [c] meinte ich: "Best puppy...", "FCI...", ...

Da hab ich doch glatt alle weiteren Bewertungen (BR, BOB, VDH...)
vergessen! Also noch:
[e] - BR, BOB, VDH,...
[f] - errungene weitere Bewertungen
Macht 12 Tabellen. Langsam overkill... :-/

Best regards
Michael

Re: MySQL-Syntax-Fehler?

am 29.08.2005 14:31:59 von Werner Flamme

Michael Praast schrieb am 27.08.2005 21:18:
> "Michael 'Ingrid' Praast" meißelte
>
>>Was ihr "empfehlt":
>>dog - ID, Hundename
>>person - ID, Name (des Züchters bzw. aktuellen Halters)
>>klasse - mögliche Klassen
>>ausstellung - ID, Datum, Name der Schau, Ort, Richter
>>ergebnis - ID, Hund, Klasse, Züchter, Halter, Ausstellung
>>bilder - ID, Ausstellung, Pic-URL, Kommentar, Rang der Anzeige
>>_neu_
>>[a] - mögliche Bewertungen (s.o., ähnlich 'klasse')
>>[b] - s.o.
>>[c] - mögliche Titel (s.o., ähnlich 'klasse')
>>[d] - errungene Titel
>
>
> Mit [c] meinte ich: "Best puppy...", "FCI...", ...
>
> Da hab ich doch glatt alle weiteren Bewertungen (BR, BOB, VDH...)
> vergessen! Also noch:
> [e] - BR, BOB, VDH,...
> [f] - errungene weitere Bewertungen
> Macht 12 Tabellen. Langsam overkill... :-/
>
> Best regards
> Michael
>

Hm?

Also das könnte doch so funktionieren:
Tabelle T1: das Tier als solches ;-) (ID, Halter, ...)
Tabelle T2: die Veranstaltung (ID, Titel, Ort, Zeitraum, ...)
Tabelle T3: die Bewertung "also solche", ohne Verknüpfung mit T1 und T2
Tabelle T4: enthält T1-ID, T2-ID, T3-ID, also die Abildung der Relation

Für eine Kombination Tier/Veranstaltung können ja wohl mehrere Bewertungen
vorkommen, entsprechend viele Datensätze stehen dann in T4. So kannst Du
dort nach T1-ID suchen (ergibt die Auswertung pro Tier), nach T2-ID suchen
(Auswertung nach Veranstaltung) und T3-ID (bei welchen Anlässen wurde ...
an wen vergeben).

Nix 12 Tabellen ;-)

Gruß
Werner

Re: MySQL-Syntax-Fehler?

am 01.09.2005 20:09:30 von Michael Praast

"Werner Flamme" schrieb
> Michael Praast schrieb am 27.08.2005 21:18:
>>Macht 12 Tabellen. Langsam overkill... :-/
>
>Hm?
>
>Also das könnte doch so funktionieren:
>Tabelle T1: das Tier als solches ;-) (ID, Halter, ...)

Plus Tabelle T1b: Der Hund wird zwar vermutlich oftmals erstmal bei
einer Ausstellung vom Züchter (gleichzeitig Halter) vorgeführt, kann
und wird aber eventuell einen neuen Halter in seinem Leben haben.
1) Hund, Züchter, Halter(=Züchter)
2) Hund, Züchter, Halter(=irgendwer irgendwann)
Das hab ich ja aber schon mit den Tabellen 'dog' und 'person'
realisiert, damit ich die Hundenamen nicht in X Kombinationen in der
DB habe.

>Tabelle T2: die Veranstaltung (ID, Titel, Ort, Zeitraum, ...)

Meine Tabelle 'ausstellungen'.

>Tabelle T3: die Bewertung "also solche", ohne Verknüpfung mit T1 und T2

Naja, ähnlich meiner Tabelle 'ergebnis', die allerdings eher deiner
T4 entspricht.

>Tabelle T4: enthält T1-ID, T2-ID, T3-ID, also die Abildung der Relation
>Für eine Kombination Tier/Veranstaltung können ja wohl mehrere
>Bewertungen vorkommen, entsprechend viele Datensätze stehen dann in T4.

Und wo steckst du die Klassen hin, in denen die Hunde starten können?
Ich biete da:
-Jüngstenklasse (Rüden)
-Jugendklasse (Rüden)
-Zwischenklasse (Rüden)
-Championklasse (Rüden)
-Offene Klasse (Rüden)
-Veteranenklasse (Rüden)
-Ehrenklasse (Rüden)
-Jüngstenklasse (Hündinnen)
-Jugendklasse (Hündinnen)
-Zwischenklasse (Hündinnen)
-Championklasse (Hündinnen)
-Offene Klasse (Hündinnen)
-Veteranenklasse (Hündinnen)
-Ehrenklasse (Hündinnen)

Da Lebewesen die Angewohnheit haben jederzeit zu altern brauchts also
auch da eine weitere Tabelle (gelöst über eine eigene Tabelle mit nur
ID und klasse, da unabhängig von anderen Tabellen und festen Werten).

Das Problem, worauf deine Vorposter anspielten war, die Trennungen so
sauber wie möglich zu halten. Einige der Bewertungen kommen nur in
einzelnen Altersgruppen des Hundes vor, andere eben garantiert nicht
(kein ausgewachsener Hund kann 'best puppy in show' werden, da dieser
Titel nur bis zu einem Alter von 6 Monaten vergeben wird, die Bewertungen
VV, Vsp und Wvsp nur bis 15 Monate und so eine Handvoll Hund eben nicht
irgendeinen Veteranentitel bekommen kann).

Dein Vorschlag ist nur unwesentlich anders als das, was ich bisher
realisiert (oder sollte man in meinem Fall eher von 'verbockt'
sprechen?) habe.

Danke trotzdem, aus allen Hinweisen werd ich mir (wenn mehr Zeit) etwas
passendes basteln. Ich weiß, ohne genaue Kenntnis der einzelnen
Zusammenhänge ist es schwer, da ein einfaches Modell zu entwickeln, da
bei meinem Beispiel sich an allen Ecken und Enden alles Mögliche
ändern kann (die Halter, die Bewertungen, teils unique, teils mehrfach,
alterabhängig usw). Ich hatte ja auch keine Ahnung von diesem ganzen
Bewertungskram und musste das meinem "Auftraggeber" mühsam über mehrere
Wochen aus dem Kreuz leiern. Und da mochte ich auch nicht X-mal die
Tabellen umstellen und die Scripte neu schreiben. Wenn, dann einmal,
wenn ich wie gesagt mehr Zeit habe (Nachteil von Null-Budget-Projekten).

Best regards
Michael

Re: MySQL-Syntax-Fehler?

am 01.09.2005 22:22:13 von Axel Schwenke

"Michael Praast" wrote:
> "Werner Flamme" schrieb

>>Also das könnte doch so funktionieren:
>>Tabelle T1: das Tier als solches ;-) (ID, Halter, ...)
>
> Plus Tabelle T1b: Der Hund wird zwar vermutlich oftmals erstmal bei
> einer Ausstellung vom Züchter (gleichzeitig Halter) vorgeführt, kann
> und wird aber eventuell einen neuen Halter in seinem Leben haben.
> 1) Hund, Züchter, Halter(=Züchter)
> 2) Hund, Züchter, Halter(=irgendwer irgendwann)
> Das hab ich ja aber schon mit den Tabellen 'dog' und 'person'
> realisiert, damit ich die Hundenamen nicht in X Kombinationen in der
> DB habe.

Also je eine Tabelle für Hunde und Personen. In der Hunde-Tabelle
zwei Spalten `zuechter` und `halter`, die Verweise auf die Personen-
ID enthalten. Falls du den Fall berücksichtigen willst, daß ein Hund
den Halter wechselt, fällt die `halter` Spalte weg und du brauchst
eine weitere Tabelle halter (hund_id, person_id, von, bis).

>>Tabelle T2: die Veranstaltung (ID, Titel, Ort, Zeitraum, ...)
>
> Meine Tabelle 'ausstellungen'.
>
>>Tabelle T3: die Bewertung "also solche", ohne Verknüpfung mit T1 und T2
>
> Naja, ähnlich meiner Tabelle 'ergebnis', die allerdings eher deiner
> T4 entspricht.

Eben. Das sind zwei Tabellen. Eine mit den erreichbaren Resultaten,
eine mit den tatsächlich erreichten. Wobei letztere Tabelle einen
Eintrag aus der ersten referenziert (manche sagen auch FOREIGN KEY
dazu)

> Und wo steckst du die Klassen hin, in denen die Hunde starten können?
> Ich biete da:
> -Jüngstenklasse (Rüden)
> -Jugendklasse (Rüden)
> -Zwischenklasse (Rüden)
> -Championklasse (Rüden)
> -Offene Klasse (Rüden)
> -Veteranenklasse (Rüden)
> -Ehrenklasse (Rüden)
> -Jüngstenklasse (Hündinnen)
> -Jugendklasse (Hündinnen)
> -Zwischenklasse (Hündinnen)
> -Championklasse (Hündinnen)
> -Offene Klasse (Hündinnen)
> -Veteranenklasse (Hündinnen)
> -Ehrenklasse (Hündinnen)

Das sind zwei Eigenschaften. Rüde oder Hündin ist ein Attribut des
Tieres. Die Klasse ist ein Attribut der erreichten Auszeichnung. Also
eine weitere Tabelle analog T3 und eine weitere Spalte in T4 mit einer
Referenz darauf.

Wenn du gerne möchtest, kannst du T3 gleich als (partielles) Produkt
aus "Auszeichnung" und "Klasse" anlegen. Damit erschlägst du auch
gleich die Anforderung, daß "Best Puppy" nicht in der Veteranenklasse
vergeben wird.


XL