SonicCGN
30-12-2007, 00:16
Habe wieder ein SQL prob.
Habe ein Form wo Kunden ihre Daten eintragen.
Im INSERT möchte ich jedoch auch Landkreis und Bundesland automatisch mitspeichern lassen.
Also auf die weise wie hier unten:
INSERT INTO `kunden`
SELECT `landkreis`, `bundesland`
FROM `plzdb` where plzdb.plz=51429
So soll es aussehen. Klappt aber nicht.
INSERT INTO `kunden` (
`plz` ,
`ort` ,
`landkreis` ,
`bundesland` ,
)
VALUES (`51429`,`Bergisch Gladbach`,
SELECT landkreis from plzdb where plzdb.plz=51429,
SELECT bundesland from plzdb where plzdb.plz=51429 );
Kann mir jemand weiter helfen ?
Cu Sven
mysql_error() hilft dir gern weiter
SonicCGN
30-12-2007, 01:50
Naja das mit der Fehlermeldung hätte ich auch alleine hin bekommen. Zumal PMA mir sie freiwillig gibt ;-)
Es ging mir hier einzig um die richtige Syntax.
Aber habe es jetzt doch noch irgendwo eine Antwort gefunden.
Kannte bisher nur die VALUE (...) Version.
Habe soeben heraus gefunden das es auch anders geht.
INSERT into `tabelle` SET `spalte1` = "blabla", `spalte2` = (Select ... from...)
So oder so werden Subselects in Klammern gesetzt.
Was anderes: Dein Datenbankdesign ist Murks. Du hälst offensichtlich eine Tabelle mit allen PLZ, den dazugehörigen Städten und Landkreisen vor (übrigens gibt es auch Kreisfreie Städte ;)). Warum referenzierst du nicht auf diesen Datensatz? So hast du min. zwei Datensätze, in denen die selben Daten stehen. Das ist unschön.
SonicCGN
30-12-2007, 15:18
Ich habe ca. 30.000 Datensätze. Kommt ein neuer hinzu so erhält dieser Automatisch anhand der PLZ eine Stadt (per Select), einen Landkreis und ein Bundesland zugewiesen.
Landk. und Bundesl. werden nicht angezeigt -> diese dienen mir nur zur Suche nach Landk. bzw Bundesl. bzw. auch nach Kreisfreien Städten ;-)
Wenn ich bei einer LiveSuche erst alle PLZ's mit der PLZ DB vergleichen muss iss das doch sicherlich nicht sehr performant ?!
Oder verstehe ich Dich etwas falsch.
Ich handle nur nach bestem wissen, lasse mich aber gerne belehren--> so lange ich es auch umsetzten kann:D
Dann Joinst du einfach die Tabelle auf deine Kundendatensätze.
SonicCGN
05-01-2008, 22:07
Habe mich jetzt mal ans Thema Join heran gewagt.SELECT TIMESTAMPDIFF( YEAR , persodata.gebdat , CURDATE( ) ) as jahre,
kundenlogin.knr, docs.filename, docs.width, docs.height
from persodata, `kundenlogin`
left JOIN `docs` ON kundenlogin.knr = docs.knr where kundenlogin.kategorie = 3 group by knr
Da meine mySQL Kenntnisse doch etwas begrenzt sind habe ich es bisher immer mit do..while Schleifen gemacht.
(Also in die Schleife jeweils eine weitere SQL abfrage) Ich weis daß das Eure Herzen höher schlagen lässt :D
Aber ich bekomme es einfach nicht so recht auff'e Reihe.
So jetzt muss ich es mal anpacken. und habe auch in PMA ein recht schönes Result bekommen.
Nur jetzt habe ich das Prob. daß die Spalte (gebdat) bei jeder row den gleichen Inhalt hat.
Da muss irgendwie auch ein `left JOIN`rein glaube ich. Sowie das `group by knr`iss hier wohl auch falsch.
Nur egal wo ich es zwischen setzte bekomme ich immer einen Fehler.
Cu Sven