PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   SQL / Datenbanken (https://www.php-resource.de/forum/sql-datenbanken/)
-   -   Noch ne Frage;-) (https://www.php-resource.de/forum/sql-datenbanken/15562-noch-ne-frage.html)

KhanSingh 26-01-2003 13:49

Noch ne Frage;-)
 
Nachdem die erste Frage so schnell und super beantwortet wurde (schleim!), schieße ich die zweite nochmal hinterher:

Ich habe diverse Artikel im Shop, bei denen das Material häufig dasselbe ist. Nun würde ich gerne nachträglich eine Art Update auf die Artikel-Bezeichnung durchführen, bei der der Material-Name mit einem Link belegt wird. Und zwar logischerweise ohne daß der Rest-Inhalt dabei gelöscht wird. Geht das überhaupt???

Also ich habe z.B. in der Materialbeschreibung stehen:

Traumhafte Figur, sehr detailiert
Material: Weissmetall
Höhe ca.: 20 cm

Nun soll das Wort Weissmetall mit einem Link hinterlegt werden (und zwar bei allen Artikeln, bei denen das Material Weissmetall ist).

Die Tabelle heißt 'Artikel' und das Feld heißt 'Beschreibung'

Man müßte jetzt wohl irgendwie innerhalb der Abfrage nach dem Wort Weissmetall suchen und gleichzeitig nur dieses eine Wort "replacen"...

Wie bekommt man so etwas hin???

Gleichzeitig möchte ich in einer weiteren Abfrage bei allen Artikeln in der Beschreibung den Passus "versandkostenfrei" ergänzen, wo der Artikel-Wert 100 Euro oder größer ist. Das Problem ist immer das gleiche...wenn ich update dürfte ja nur das Wort versandkostenfrei erscheinen; der Rest wäre weg...wie geht das bloss?

Gruß KhanSingh

TobiaZ 26-01-2003 14:15

habs jetzt nicht mehr ganz durchgelesen, aber ich nehme an, dass ist das selbe, was du auch in dem anderen Post schon erwähnt hattest.

Da bleibt dir nur folgendes:

Auslesen
Parsen
Updaten.

Ich denke es ist besser, wenn du das erst parst, wenn du die Daten ausließt. Aber das wolltest du mit dem Preis ja auch schon nicht. In dem Fall könnte es auch sein, dass es zu langsam wird.

Also machs, wie oben beschrieben. Allerdings ists schwerer zu administriern

KhanSingh 26-01-2003 14:20

Hi!

Vielen Dank again;-)

Aber der Sachverhalt hier ist anders, weil ich ja Teile der Beschreibung nicht ändern möchte. Was heißt in dem Zusammenhang übrigens parsen?

Gruß

TobiaZ 26-01-2003 14:24

ja, das hattest du aber in dem anderen post auch schon erwähnt (beiläufig am ende).

du ließt also den text aus der DB aus
suchst nach Holz und ersetzt holz dann mit <a href=holz.php>holz</a>
uns speicherst den geänderten string wieder in der Db.

KhanSingh 26-01-2003 14:41

Ok,

das macht man dann z.B. mit den CSV-Dateien, richtig?

Das war mir im Ansatz schon bekannt, ich wollte es aber über eine Abfrage umsetzen. Gibt es da keine Möglichkeit?

TobiaZ 26-01-2003 14:44

das kannst du so direkt auf die Datenbank anwenden.

Nur in einer einzigen Abfrage ist das nicht möglich. (so gesehen sinds zwei querys, mit bisschen code dazwischen.)

KhanSingh 26-01-2003 14:47

nun verwirrst Du mich;-)

Wie wende ich das denn direkt auf die Datenbank an? Entschuldige meine Unwissenheit:-) Und wie lauten die beiden Queries und wie das bißchen Code dazwischen *g*

TobiaZ 26-01-2003 15:04

Bin ich Bimbo oder was?

ganz direkt geht das nicht. aber du kannst dir den weg über die csv sparen.

DB Zeile auslesen
Zeile Parsen
Zeile Updaten

nächste DB Zeile auslesen
Zeile Parsen
Zeile Updaten

und immer so weiter...

KhanSingh 26-01-2003 15:13

Ich wollte Dich nicht über Gebühr strapazieren. Ich schau dann mal, ob ich das Nachvollziehen kann;-)

Gruß und Danke

goth 26-01-2003 15:14

Geht auch direkt mit MySQL:

Code:

UPDATE artikel
  SET beschreibung=REPLACE(beschreibung,'weissmetall','weissblechdosen');

Oder bei der Abfrage (was ich vorziehen würde):

Code:

SELECT REPLACE(beschreibung, 'weissmetall', 'weissblechdosen') beschreibung
FROM artikel

Die 2. Frage:
Code:

SELECT IF(wert>100, CONCAT(beschreibung, '\nVersandkostenfrei'), beschreibung) beschreibung
FROM artikel

Alles zusammen:
Code:

SELECT REPLACE(IF(wert>100, CONCAT(beschreibung, '\nVersandkostenfrei'), beschreibung), 'weissmetall', 'weissblechdosen') beschreibung
FROM artikel

Bye

TobiaZ 26-01-2003 15:20

Okay, ich halt mein Maul!

*wiedermalvongotheinesbesserenbelehrtwordenbin*

:rolleyes:

goth 26-01-2003 15:21

@TobiaZ: ehrlich gesagt hab' ich mir die Antworten gar nicht durchgelesen ... habe nur gesehen das mein Vorschlag noch nicht dabei war ... :D

TobiaZ 26-01-2003 15:24

OffTopic:
Ist ja klar: Da ich nur Müll erzähle

KhanSingh 26-01-2003 16:03

1.Teil wunderbar; 2-Teil...
 
Hi!

Also erstmal bin ich ja froh, daß es in diesem Forum Menschen gibt, die einem helfen! Mit Datenbanken stehe ich momentan halt noch etwas auf Kriegsfuss und dümpel mit meinem Halbwissen so vor mich hin...aber das wird besser! Nicht zuletzt durch Leute wie Euch.

Also, ich habe mich natürlich sofort an den Vorschlag von goth gemacht und *juppiduh!*! Der erste Ansatz mit dem Weissmetall war genau das was ich gesucht habe. Das hat mir elendig viel Arbeit erspart!

Beim zweiten habe ich noch Schwierigkeiten.

Ich habe folgende Syntax probiert:

SELECT IF(wert>100, CONCAT(beschreibung, '\nVersandkostenfrei'), beschreibung) beschreibung
FROM artikel

Beschreibung und Wert habe ich jeweils in Hochkammas gesetzt (weil Feldnamen), bei artikel (also dem Tabellennamen) das gleiche.

Leider war die Abfrage nicht erfolgreich! Die Datenbank hat kurz überlegt und mir dann halt nur einige Felder angezeigt; aber die waren eher willkürlich. Geändert hat sich nichts.

Also vielleicht nochmal:

Um folgende Felder geht`s:

"Preis"
"Artikel" (als Tabellenname)
"Beschreibung"

Im Feld Beschreibung soll diesmal nichts ersetzt werden, sondern lediglich hinzugefügt. Und zwar soll bei allen Artikeln, bei denen der Preis höher oder gleich 100 ist einfach nur der Text Versandkostenfrei (kann man ja noch ausschmücken) hinzugefügt werden.

Generationen von Datenbank-Nutzern werden Euch dankbar sein!:-)

Gruß

goth 26-01-2003 16:37

Code:

SELECT IF(Preis>=100, CONCAT(Beschreibung, '\nVersandkostenfrei'), Beschreibung) Beschreibung
FROM Artikel

sollte eigentlich funktionieren ... :dontknow:

Wenn Deine MySQL im ANSI-Modus läuft geht auch:
Code:

SELECT IF(Preis>=100, Beschreibung||'\nVersandkostenfrei', Beschreibung) Beschreibung
FROM Artikel

Feld und Tabellennamen werden nicht in Hochkommas gesetzt ... bestenfalls Backticks kann man dafür verwenden ... Hochkommas leiten in SQL 'ne Zeichenkette ein ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:12 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG