Forenbeiträge erstellen mit SQL Insert Join?

lisali

Erfahrenes Mitglied
Hallo,

es geht darum, dass ich gerne Forenbeiträge erstellen lassen möchte. Ich habe jedoch zwei Tabellen: board_threads und board_posts.

Ich habe bisher selten mit Joins gearbeitet und kenne mich ehrlich gesagt auch nur dabei aus, wenn ich etwas aus zwei Tabellen auswählen will, also SELECT.

Ist in meinem Fall überhaupt zu einem INSERT-Join zu raten oder was ist der "übliche" Weg bzw. die Vorgehensweise bei so einer Sache (also generell Forenbeiträge erstellen zu programmieren)?

Und wie sollte ich besser vorgehen als im folgenden Code, wenn ich nach dem Eintrag in die DB automatisch weiterleiten möchte, da ich ja die "neue" id brauche? (Also, falls ich überhaupt "besser" vorgehen kann!?)

PHP:
mysql_query("INSERT INTO board_threads (bid,art_id,user_id,title,date) 
	VALUES ('".$_GET['bid']."','".$_GET['art']."','".$_SESSION['user_id']."','".$_POST['title']."',NOW())");

$get = mysql_fetch_array(mysql_query("SELECT id FROM board_threads 
	WHERE user_id='".$_SESSION['user_id']."' AND title='".$_POST['title']."'"));

	mysql_query("INSERT INTO board_posts (bid,tid,user_id,text,date) 
	VALUES ('".$_GET['bid']."','$get[id]','".$_SESSION['user_id']."','".$_POST['text']."',NOW())");

	header("Location: ?s=board&tid=".$get[id]."");

Ich hoffe man kann mir helfen! Vielen Dank.

Liebe Grüße,

Lisa
 
Ich nehme mal an die Id ist in der Tabelle board_threads dein Primärschlüssel, des weiteren wird die Kombination aus (user_id, title) nicht unique sein. Das heißt, dass du wenn ein User zwei Threads mit dem gleichen Titel besitzt, möglicherweise nicht die richtige Id zurückbekommst (oder halt mehrere Ids).

Es gibt aber die Möglichkeit die zuletzt eingefügte Id abzufragen: mysql_insert_id
 
PHP:
mysql_query("

INSERT INTO
    board_threads
    (bid,art_id,user_id,title,date) 
    VALUES
    ('".$_GET['bid']."','".$_GET['art']."','".$_SESSION['user_id']."','".$_POST['title']."',NOW())
    
    ");

$iThreadId = mysql_insert_id();

mysql_query("

INSERT INTO
    board_posts
    (bid,tid,user_id,text,date) 
    VALUES
    ('".$_GET['bid']."','$get[id]','".$_SESSION['user_id']."','".$_POST['text']."',NOW())
    
    ");

    header("Location: ?s=board&tid=".$iThreadId."");

So sollte es klappen. [phpf]mysql_insert_id[/phpf] liefert dir die ID von deinem Insert Query.
 
Vielen Dank für die Aufklärung und Mühe!

Also, wäre hier ein INSERT-Join gar nicht angebracht, wo alles mit einem Mal übergeben werden könnte (falls es das überhaupt könnte!)?

Ich nehme mal an die Id ist in der Tabelle board_threads dein Primärschlüssel, des weiteren wird die Kombination aus (user_id, title) nicht unique sein. Das heißt, dass du wenn ein User zwei Threads mit dem gleichen Titel besitzt, möglicherweise nicht die richtige Id zurückbekommst (oder halt mehrere Ids).

Es gibt aber die Möglichkeit die zuletzt eingefügte Id abzufragen: mysql_insert_id

Also, das einzige was vergleichbar wäre, wäre die user_id in `board_threads` und `board_posts`. Sollte ich die Schlüssel dort auf Unique setzen?
Aber ja, du hast recht... dann könnte der Zufall eventuell kommen, dass ein User Mal nach gewisser Zeit wieder einen Thread mit selbigen Titel eröffnet. Das wäre ein Problem.

Liebe Grüße,

Lisa
 
Nein du musst die (user_id, title) nicht auf unique setzen, ich wollte dir damit nur zeigen das du mit einer SELECT-Abfrage in der keine Schlüsselattribute enthalten sind nicht zwingend die richtigen Werte zurückbekommst.

Ich würds genau so implementieren wie Jan oben geschrieben hat.
 
Zurück