sql query 2 Tabellen welche Zeilen fehlen

Scuzzi

Mitglied
Hallo,

Ich weiss nicht mehr weiter, deshalb wende ich mich an euch.

Die Anforderung

Ich habe eine Tabelle mit Aufgaben

Ich habe Benutzer die diese Aufgaben erledigen müssen (alle müssen die selben Aufgaben erledigen)

Ich will sehen welcher kunde welche Aufgabe erledigt resp. noch nicht erledigt hat.

z.Z. involvierte Tabellen

kunden (id)
aufgaben (id)
kunden_aufgaben(hier werden die erledigten Aufgaben erfasst)
kunden_aufgaben hat referenzen zu kunden und aufgaben.

Im Moment habe ich eine csv datei mit den Aufgaben. Ich fülle die Referenz Kunden_id mit der kunden id des neuen kunden
und importiere diese dann. über ein Feld erledigt definiere ich den Status. Ich kann so arbeiten, aber ist natürlich nicht wirklich
gut.

Ich probiere schon eine ganze weile dies zu lösen, komme aber nicht weiter.

kann mir jemand helfen.

Wenn nötig ändere ich natürlich auch das design. Ich brauche hier einfach einen Lösungungsweg für diese Aufgabe.

Danke schon mal für eure Unterstützung

Salvatore
 
ich finde nicht gut, dass ich für jeden kunden eine todo liste mit csv importieren muss!

was ist das ziel?
ich möchte eine mastertabelle mit n aufgaben erstellen.
wenn ein kunde aus dieser tabelle einen job erledigt hat, trage ich das ein. nun möche ich sehen, welche jobs er erledigt und welche jobs noch offen sind! das sollte doch möglich sein.
ich denke das ich die tabelle erledigte jobs mit der mastertabelle vergleichen kann, und mir die noch nicht erledigten jobs anzeigt! die erledigten jobs sehe ich ja dann in der tabelle erledigte jobs.
also ganz abstrakt ausgedrückt
vergleiche master iob tabelle mit der erledigt job tabelle und zeige alle die noch offen sind. natürlich pro kunde! ich hoffe ich habs einigermassen verständlich ausgedrückt
 
SQL:
select 
  k.name as kunde,
  a.name as aufgabe,
  case
    when ka.kunden_id is null then 'Offen'
    else 'Erledigt'
  end as status 
from
  aufgaben a
cross join
  kunden k
left join
  kunden_aufgaben ka
on
  ka.kunden_id = k.id
  and
  ka.aufgaben_id = a.id
order by
  k.id, 
  a.id;

http://www.sqlfiddle.com/#!4/32809/38
 
Zuletzt bearbeitet von einem Moderator:
Hallo, das ging ja unglaublich schnell! Ich war arbeiten, doch jetzt probiere ich das aus! ich danke dir, euch im voraus! gebe dann bescheid!
lg Salvatore
 
OK, dass hat perfekt funktioniert.

Wie immer kommt da noch was....

Ist es möglich, direkt aus dieser Liste jetzt einen aufgabe als erledigt zu markieren?
 
Ist es möglich, direkt aus dieser Liste jetzt einen aufgabe als erledigt zu markieren?

Wenn du als Suchkriterium die Aufgaben-ID und als Einfüge-Wert die Kunden-ID mit abgeholt hast (dafür müsstest du den ersten SELECT erweitern), sollte das kein Problem darstellen:

SQL:
UPDATE kunden_aufgaben SET kunden_id = [hier_kunden_id_aus_dem_select] WHERE aufgaben_id = [hier_aufgaben_id_aus_dem_select];
 
OK, dass hat perfekt funktioniert.

Wie immer kommt da noch was....

Ist es möglich, direkt aus dieser Liste jetzt einen aufgabe als erledigt zu markieren?

Das einzige was du tun kannst ist das select query um a.id und k.id erweitern so wie saftmeister geschrieben hat.

Danach danach musst du aber eine neue insert query absetzen mit den id's die du als erledigt markieren willst:
SQL:
INSERT INTO kunden_aufgaben VALUES (kunden_id, aufgaben_id);

Tipp: Du solltest aber aufpassen, dass das selbe kunden-aufgaben-paar nicht zweimal in der Tabelle steht. Das kannst du mit einem Unique Index über beide Spalten erreichen.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
Ich stecke beim INSERT fest, aber zuerst noch eine kleine Erklärung,

Die Kunden, resp. deren ausgeführten jobs werden natürlich bewertet (BW von 1-5), Sie können es 10 mal versuchen, so hab ich die Tabelle "sb" (kunden_aufgaben) aufgebaut und gearbeitet.
Das "Done" war bisher "Erledigt", halt auch in der Tabelle sb (Ja,Nein)

Hier mal der Code; der läuft
------------------------------------------
SQL:
select
  k.kunden_id as Kunden,
  a.id as Aufgaben,
  ka.done,
  ka.bw01,
  ka.bw02,
  ka.bw03,
  ka.bw04,
  ka.bw05,
  ka.bw06,
  ka.bw07,
  ka.bw08,
  ka.bw09,
  ka.bw10,
  
  case
    when ka.kunden_id is null then ''
    else 'Erledigt'
  end as status 
from
  anf a
cross join
  kunden k
left join
  sb ka
on
  ka.kunden_id = k.kunden_id
  and
  ka.anf_id = a.id
order by
  k.kunden_id, 
  a.id

-------------------------------------------------------

INSERT Code; der läuft nicht (Eröffnungs Datensatz)
-------------------------------------------------------
SQL:
INSERT INTO sb VALUES
(NULL, <-- primärschlüssel von sb (habe ich in anderen querys auch so gemacht)
 :kunden_id,
 :anf_id,
 :done,
 :bw01,
 :bw02,
 :bw03,
 :bw04,
 :bw05,
 :bw06,
 :bw07,
 :bw08,
 :bw09,
 :bw10);
----------------------------------------------------------
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 ':kunden_id, :anf_id, 1, 3, N' at line 3

Ich bin mir sicher es liegt ganz nahe und hat eben wie ihr sagt mit den id's zu tun,
für mein verständnis habe ich die drin, aber eben:-(

-----------------------------------------------

Wenn das mal geht, dann müsste ja für eine weitere Bewertung dieses Jobs, vor ab geprüft werden, ob Eintrag existiert. Wenn ja ist es kein INSERT mehr sondern ein Update und das müsste automatisch swichen, geht das überhaupt?

Ich weiss nicht wie ich euch danken kann, und bekomme langsam auch ein schlechtes gewissen!
 
Zuletzt bearbeitet von einem Moderator:
Beim Insert nach Values solltest du die Feldliste mitgeben
SQL:
INSERT INTO mytable 
-- Diese Auflistung fehlt dir
(feld_1, feld_2)
VALUES(1, 2)
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück