MYSQL if statement Problem

Malaxo

Erfahrenes Mitglied
Hey

Ich hab da ein Problem mit einem für mich komplizierten MYSQL Statement.

Das hier klappt:
Code:
SELECT request_id, request_date, deadline, repetitions, request_count, 
`categories`.category, `customers`.plz, `users`.type, `users`.user_id,
`message`.request_fk, `message`.messageuser_fk, `message`.message_status
FROM requests
LEFT JOIN `categories` ON (requests.category = categories.id_category)
LEFT JOIN `users` ON (requests.user_fk = `users`.user_id)
LEFT JOIN `customers` ON (customers.user_fk = `users`.user_id)
LEFT JOIN `message` ON (message.messageuser_fk = `users`.user_id)
WHERE request_status = 'waiting'
AND ((repetitions = '1' AND request_count <= '6') OR (repetitions = '0' AND request_count <= '3'))
AND categories.id_category IN ('31')
AND deadline >= NOW()
ORDER BY deadline ASC

Nun möchte ich, wenn `message`.request_fk NULL oder Leer ist ein insert machen. Ungefährt so:
Code:
IF `message`.messageuser_fk = ''
THEN INSERT INTO message (request_fk,messageuser_fk,message_status) VALUES (`requests`.request_id,`users`.user_id,1)

bekomme aber immer ein Syntax error near IF und bringe es nicht fertig.

Ich muss den Select ausgeben und falls messageuser leer ist noch die Daten einpflegen.

Ganzer Code:
Code:
SELECT request_id, request_date, deadline, repetitions, request_count, 
`categories`.category, `customers`.plz, `users`.type, `users`.user_id,
`message`.request_fk, `message`.messageuser_fk, `message`.message_status
FROM requests
LEFT JOIN `categories` ON (requests.category = categories.id_category)
LEFT JOIN `users` ON (requests.user_fk = `users`.user_id)
LEFT JOIN `customers` ON (customers.user_fk = `users`.user_id)
LEFT JOIN `message` ON (message.messageuser_fk = `users`.user_id)
WHERE request_status = 'waiting'
AND ((repetitions = '1' AND request_count <= '6') OR (repetitions = '0' AND request_count <= '3'))
AND categories.id_category IN ('31')
AND deadline >= NOW()
ORDER BY deadline ASC
IF `message`.messageuser_fk = ''
THEN INSERT INTO message (request_fk,messageuser_fk,message_status) VALUES (request_id,`users`.user_id,1)

Kann mir da einer helfen?
 
erst prüfen ob das select alleine genau liefert was du inserten willst, und falls das dann so ok ist einfach einfügen...

SQL:
INSERT INTO message (request_fk,messageuser_fk,message_status)
SELECT `requests`.request_id AS request_fk,`users`.user_id AS messageuser_fk,1 AS message_status
FROM requests
LEFT JOIN `categories` ON (requests.category = categories.id_category)
LEFT JOIN `users` ON (requests.user_fk = `users`.user_id)
LEFT JOIN `customers` ON (customers.user_fk = `users`.user_id)
LEFT JOIN `message` ON (message.messageuser_fk = `users`.user_id)
WHERE request_status = 'waiting'
AND ((repetitions = '1' AND request_count <= '6') OR (repetitions = '0' AND request_count <= '3'))
AND categories.id_category IN ('31')
AND deadline >= NOW()
AND (`message`.messageuser_fk = '' OR `message`.messageuser_fk IS NULL);
 
Zuletzt bearbeitet von einem Moderator:
Dann habe ich zwei Anweisungen richtig?
Wollte es eigentlich in einer Anweisung, aber wenn es nicht geht mach ich es in zwei mit Hilfe von PHP if.
 
nein, ist eine anweisung mit 2 teilen. inserted wird, was das select liefert. ausführen kann man das ganze in einem stück.
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

das wegen dem prüfen habe ich nur gesagt, damit du dir sicher sein kannst, dass alles so in die tabelle kommt wie es sein soll, da du dieses statement offensichtlich noch nicht kennst. daher empfehle ich wenn man was neues verwendet ersteinmal für sich selber die einzelnen teile auszuprobieren um zu verstehen was da eigentlich passiert.
 
Zuletzt bearbeitet:
Und noch ein Tipp. Formtire soclhe SQLs. Deine Schreibweise ist nicht lesbar

SQL:
SELECT 
	r.request_id,
	r.request_date,
	r.deadline,
	r.repetitions,
	r.request_count,
	cat.category,
	cust.plz,
	u.type,
	u.user_id,
	msg.request_fk,
 	msg.messageuser_fk,
	msg.message_status
FROM 
	requests AS r
	LEFT JOIN categories AS cat 
		ON (r.category = cat.id_category)
	LEFT JOIN `users` AS u 
		ON (r.user_fk = u.user_id)
	LEFT JOIN customers AS cust 
		ON (cust.user_fk = u.user_id)
	LEFT JOIN message AS msg 
		ON (message.messageuser_fk = u.user_id)
WHERE 
	request_status = 'waiting'
	AND (
		(
			repetitions = '1' 
			AND request_count <= '6'
		) OR (
			repetitions = '0' 
			AND request_count <= '3'
		)
	)
	AND cat.id_category IN ('31')
	AND deadline >= NOW()
ORDER BY
	deadline ASC

Und als Insert genau so wie BaseBallBatBoy geschrieben hat. Uch habe mal noch die Tabelle customers entfernt, da diese mWn nicht gebraucht wird. Ebenfalls habe ich alle Felder die nicht fix einer Tabelle zugeordnet waren mal der Tabelle requests zugeordnet in der Annahme dass diese Felder von dort stammen
SQL:
INSERT INTO message (
	request_fk,
	messageuser_fk,
	message_status
) SELECT 
	r.request_id,
	u.user_id,
	1 AS message_status
FROM 
	requests AS r
	LEFT JOIN categories AS cat 
		ON (r.category = cat.id_category)
	LEFT JOIN `users` AS u 
		ON (r.user_fk = u.user_id)
	LEFT JOIN message AS msg 
		ON (message.messageuser_fk = u.user_id)
WHERE 
	r.request_status = 'waiting'
	AND (
		(
			r.repetitions = '1' 
			AND r.request_count <= '6'
		) OR (
			r.repetitions = '0' 
			AND r.request_count <= '3'
		)
	)
	AND cat.id_category IN ('31')
	AND r.deadline >= NOW()
	AND IFNULL(msg.messageuser_fk, '') = ''
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück