Bräuchte Hilfe bei SQL-Anweisung

Hallo Leute,

in unserer Firma verwenden wir ein kleines Warenwirtschaftssystem mit gleichzeitiger Anbindung an einen Onlineshop.

Hier ersteinmal die SQL-Anweisung hierfür:

SELECT CAST(w1.ArtNr AS CHAR(15)),
w2.Bez,
w2.Beschreibung,
k.Kategorie,
p.VK,
w2.MELM,
w2.Gewicht,
w2.MwSt,
CAST(w1.ArtNr AS CHAR(15)) + “_1.jpg” AS w2.BildPfad,
w2.LagerBest - w2.ReserviertBest AS LagerBestand,
w2.PicChange,
w2.PreisKZ,
p.Kalk,
w2.ZNr1
FROM “:DeltaFakt:W0000001.db” w1,
":DeltaFakt:W0000002.db" w2
JOIN “:DeltaFakt:KAT00001.db” k
ON k.KatID = w2.KatID
JOIN “:DeltaFakt:PR000001.db” p
ON p.ArtNrInt = w1.ZNr1
AND p.Nr = 1
WHERE w2.ZNr1 = w1.ZNr1
AND w2.OnlineArt = TRUE

Wenn ich alles richtig verstehe wird in der zweiten Zeile (w2.Bez) das Bezeichnungsfeld abgefragt. Ist es möglich dieses Feld nur bis zum auftreten eines bestimmten Zeichens - z.B. Backslash - auszulesen?

Ich bin zwar bei meiner Recherche auf ‘Select left’ und ‘charindex’ gestossen, aber meine SQL-Kenntnisse reichen leider nicht aus um die Anpassung vorzunehmen.

Wäre super wenn mir einer von euch weiterhelfen könnte.

Mfg
Gockel

SELECT CAST(w1.ArtNr AS CHAR(15)), SUBSTR(w2.Bez,0,INSTR(w2.Bez,'/')), w2.Beschreibung, k.Kategorie, p.VK, w2.MELM, w2.Gewicht, w2.MwSt, CAST(w1.ArtNr AS CHAR(15)) + "_1.jpg" AS w2.BildPfad, w2.LagerBest - w2.ReserviertBest AS LagerBestand, w2.PicChange, w2.PreisKZ, p.Kalk, w2.ZNr1 FROM ":DeltaFakt:W0000001.db" w1, ":DeltaFakt:W0000002.db" w2 JOIN ":DeltaFakt:KAT00001.db" k ON k.KatID = w2.KatID JOIN ":DeltaFakt:PR000001.db" p ON p.ArtNrInt = w1.ZNr1 AND p.Nr = 1 WHERE w2.ZNr1 = w1.ZNr1 AND w2.OnlineArt = TRUE

Ich habs nicht ausprobiert,sollte aber trotzdem gehen :wink:

substr()
instr()

Hi bcg,

danke für deine Antwort.
Leider meldet das Programm dann lapidar 'Fehler in SQL-Anweisung’
Mehr sagt es leider nicht aus.

Glg
Gockel

Hi,

Oh hab da was gesehen, könnte die Ursache sein, versuchs mal so:

SELECT CAST(w1.ArtNr AS CHAR(15)), SUBSTR(w2.Bez,0,INSTR(w2.Bez,"/")), w2.Beschreibung, k.Kategorie, p.VK, w2.MELM, w2.Gewicht, w2.MwSt, CAST(w1.ArtNr AS CHAR(15)) + "_1.jpg" AS w2.BildPfad, w2.LagerBest - w2.ReserviertBest AS LagerBestand, w2.PicChange, w2.PreisKZ, p.Kalk, w2.ZNr1 FROM ":DeltaFakt:W0000001.db" w1, ":DeltaFakt:W0000002.db" w2 JOIN ":DeltaFakt:KAT00001.db" k ON k.KatID = w2.KatID JOIN ":DeltaFakt:PR000001.db" p ON p.ArtNrInt = w1.ZNr1 AND p.Nr = 1 WHERE w2.ZNr1 = w1.ZNr1 AND w2.OnlineArt = TRUE

Liebe Grüsse
Joey :wink:

Hi bcg,

leider immer noch das gleiche Ergebnis ‘Fehler in SQL-Anweisung’.
Liegt es vielleicht am INSTR?
Es ginge doch auch CHARINDEX oder?

Glg
Gockel

Achso, da fällt mir ein, verwendet ihr MySQL oder PostgreSQL?
Wenn es PostgreSQL sein sollte ist INSTR natürlich unsinnig :wink:

Freundliche Grüsse

Hi bcg,

bin erst am Mittwoch wieder auf der Arbeit. Es müsste aber MySql sein.

Glg
Gockel

Naja, ich habe das ganze auf MySQL getestet und es hat funktioniert…

Wie steht denn der SQL Code in (was auch immer für) einer Datei?
so etwa: mysql_query("SELECT …
?

Hi bcg,

Das Programm führt beim aufruf scheinbar nur diese SQL-Datei aus und überträgt die Daten direkt per ftp auf den Server. Auf diese Funktionn habe ich aber leider kein Zugriff.
Oder meintest du jetzt etwas anderes?

Habe noch was festgestellt. Nach der Fehlermeldung ‘Fehler in SQL-Anweisung’ kommt in einem Fester des Programms noch folgende Meldung:
‘CSV-Datei Artikel.csv nicht vorhanden oder keine CSV-Datei angegeben!’

Hilft das weiter?

Wünsche einen guten Rutsch
Gockel

Hi bcg,

hoffe du bist gut in’s neue Jahr gerutscht.

Habe jetzt die Datei mit der MySql-Anweisung gefunden.

Sieht so aus:

                mysql_query("INSERT into $ShopConfig_db.".$ShopConfig_dbprefix."artikel (
			artnr,
			bezeichnung,
			beschreibung,
			vk,
			me,
			lager,
			gewicht,
			mwst,
			bild,
			importflag
			) values (
			'" . varclean($val[0]) . "',
			'" . varclean($val[1]) . "',
			'" . varclean($val[2]) . "',
			'" . varcleankomma($val[4]) . "',
			'" . varclean($val[5]) . "',
			'" . varcleankomma($val[9]) . "',
			'" . varcleankomma($val[6]) . "',
			'" . varclean($val[7]) . "',
			'" . varclean($val[8]) . "',
			'1')\n");
		$uid = mysql_insert_id();

Das Feld Bezeichung müsste jetzt angepasst werden. Allerdings hat sich mittlerweile eine kleine Änderung ergeben. Es soll jetzt vom Ende des Feldes bis zum auftreten eines bestimmten Zeichen ausgelesen werde. Ist das auch machbar?

Mfg
Gockel