hmm: SQL: Beim Insert ID aus anderer tabelle verwenden

Hi Leute,

meine query sieht so aus:

insert into team_mitarbeiter (team_id, mitarbeiter_id, stunden_pro_woche) values ($team_id, $mitarbeiter_id, 1) where not exist (select 1 from team_mitarbeiter where team_id = $team_id and mitarbeiter_id = $mitarbeiter_id);

die team_id habe ich, aber die mitarbeiter_id muss ich mir leider mit folgender query holen (name habe ich):

select mitarbeiter_id from mitarbeiter where name = $name;

kann ich beide querys zusammenlegen?

  1. kann ich beide querys zusammenlegen?

    Subquery?

    Pit

  2. hi

    kann ich beide querys zusammenlegen?

    Nein, so stellt sich die Frage nicht. Sondern so: Wie bekomme ich die mitarbeiter_id in das Frontend, wo mitarbeiter_name auszuwählen ist um dessen Stunden/Woche einzutragen? Und diese Antwort dürfte ziemlich einfach sein.

    Und nochwas: where team_id = $team_id

    ist bedenklich, also das Einfügen von Variablen in SQL Statements. Unter SQL Injection findest Du Verfahren ebe das zu verhindern.

    MfG

    1. danke.

      ich hab das jetzt so gemacht:

      insert into user_mitarbeiter (user_id, mitarbeiter_id) values ($user_id, (select mitarbeiter_id from mitarbeiter where name = $name));
      

      ist bedenklich, also das Einfügen von Variablen in SQL Statements. Unter SQL Injection findest Du Verfahren ebe das zu verhindern.

      ich mach das so:

      var insert_team_mitarbeiter = "insert into team_mitarbeiter (team_id, mitarbeiter_id, stunden_pro_woche) values ($team_id, (select mitarbeiter_id from mitarbeiter where name = $name ),1);";
      
      st = db.prepare(insert_team_mitarbeiter);
      st.run({$team_id: user_id[0].id, $name: data.name}, function(err) {});
      st.finalize();
      

      ich dachte das verhindert bereits sql injection?

  3. Hello,

    insert into team_mitarbeiter (team_id, mitarbeiter_id, stunden_pro_woche) values ($team_id, $mitarbeiter_id, 1) where not exist (select 1 from team_mitarbeiter where team_id = $team_id and mitarbeiter_id = $mitarbeiter_id);
    

    die team_id habe ich, aber die mitarbeiter_id muss ich mir leider mit folgender query holen (name habe ich):

    select mitarbeiter_id from mitarbeiter where name = $name;
    

    kann ich beide querys zusammenlegen?

    Wenn Dir die Konsistenz deiner Daten wichtig ist, MUSST Du beide Queries zu einem zusammenfassen, bzw. mit Tabellensperren arbeiten.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.