Webstatt.org - Community seit 2006 - 2012 (2024?)

Wenn nich vorhanden dann neu einfügen

user-115
19.02.2007 16:35

Hi,

ich möchte eine SQL abfrage ausführen in etwas so:
UPDATE `nx__projects__hits` SET `hits` = `hits` +1 WHERE `name` = "nxTerminal"


Nur möchte ich das wenn es keine Spalte mit dem Namen "nxTerminal" gibt das dann eine neue Spalte angelegt wird (also praktisch INSERT INTO). Wie kann ich das in der abfrage lösen ?

mfg, Björn

user-303
19.02.2007 16:44

setz bei dem feld einfach das attribut unique.
ob das ne schöne lösung ist...darüber lässt sich streiten

Avatar user-253
19.02.2007 16:53

Ich würde es in zwei Abfragen machen, da mir spontan kein Weg einfällt es in einer zu machen und es sicher nicht schön wird.

Einfach ein COUNT(*) ... WHERE `name` = "nxTerminal"
Bei ==0 INSERT ansonsten UPDATE

Avatar user-236
19.02.2007 18:18

hey,
hier mal ein Versuch das ganze in einem Query zu machen:



ALTER TABLE nx_project_hits

CASE WHEN EXISTS (SELECT hits FROM nx_project_hits WHERE name LIKE nxTerminal)
THEN
UPDATE nx_projects_hits SET hits = hits + 1 WHERE name = ....
ELSE
ADD COLUMN nxTerminal char(32)
UPDATE nx_projects_hits SET hits = hits + 1 WHERE name = ....
END




Musst halt noch ein bisschen anpassen. Anstatt CASE kannst du natürlich auch IF verwenden.

Bin mir nicht ganz sicher, aber mit "show columns" geht das auch irgendwie lächeln

grüße
mab

signature in progress
user-343
19.02.2007 18:42

Verwechselst du wirklich Spalten mit Datensätze, oder täusche ich mich nur?
Wenn du es tatsächlich verwechselt, gibts eine Einfache Lösung.. Ob sie schön ist; ka:

mysql_query('UPDATE `nx__projects__hits` SET `hits` = `hits` +1 WHERE `name` = "nxTerminal"'zwinkern;

if(mysql_affected_rows() <= 0) {
// Keine Datensätze geupdatet, neuen Datensatz einfügen
mysql_query('INSERT INTO `nx__projects__hits` SET `hits` = 0, `name` = "nxTerminal"'zwinkern;
}
else {
// Erfolgreich aktualisiert
}

user-115
19.02.2007 19:14

Original von user-343
Verwechselst du wirklich Spalten mit Datensätze, oder täusche ich mich nur?
Wenn du es tatsächlich verwechselt, gibts eine Einfache Lösung.. Ob sie schön ist; ka:


Ah da hab ich wohl was durch einander gebracht ich meine natürlich Datensätze.
Ich würde das ganze gerne in einer SQL-Abfrage machen.

Wie das mit Unique gehen soll, wei? ich nicht.

Die CASE Anweisung will MySQL nicht verarbeiten:
CASE WHEN EXITS(SELECT hits  FROM  nx_project_hits WHERE name='nxTerminal'zwinkern
THEN
UPDATE nx_projects_hits SET hits = hits + 1 WHERE name = 'nxTerminal'
ELSE
INSERT INTO nx_projects_hits SET hits =1 AND name = 'nxTerminal'
END

->#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN EXITS(SELECT hits FROM nx_project_hits WHERE name='nxTerminal'zwinkern
' at line 1

Gib es da noch ne möglichkeit mit CASE ?

mfg, Björn

Avatar user-236
19.02.2007 19:40

ööhm. ok für den fall, dass du jetzt einen datensatz einfügen möchtest, wenn noch keiner da is... (macht das sinn zu prüfen?? )



SELECT If (
SELECT count(*) FROM tablename WHERE column= 'blaa' == '0',
INSERT....
)
FROM tablename



falls der syntax nicht ganz stimmt:
http://dev.mysql.com/doc/refman/5.1/de/if-statement.html

oder mach's gleich wie user-343 gepostet hat.

gruß

signature in progress
user-115
19.02.2007 22:02

Ich habs geschafft lächeln

INSERT INTO nx__projects_hits(name) VALUES ('nxTerminal'zwinkern
ON DUPLICATE KEY UPDATE hits=hits+1;


SQL kann wirklich viel man muss nur wissen wie

mfg, Björn

user-220
20.02.2007 11:48

Wow, diese Lösung nenn ich echt mal elegant O.O
Also die Methode is mir neu.. *mal ins MySQL Buch vertief*

user-115
20.02.2007 13:00

Original von user-220
Wow, diese Lösung nenn ich echt mal elegant O.O
Also die Methode is mir neu.. *mal ins MySQL Buch vertief*


Dazu muss ich sagen sie ist nicht von mir *g*

user-220
20.02.2007 14:16

*lach*, aber es ist trotzdem nicht so umständlich - wie mal eben extra noch PHP dazu zu beziehen =)

user-115
26.02.2007 20:25

Leider gib es den Befehl nicht in allen mySQL Versionen traurig

user-220
26.02.2007 21:10

Hmpf =( *heul*