• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

MySQL

forwardpoint

New member
So nun wieder eine Frage an der ich IN der Dokumentation scheitere.

Ich habe eine M:N verknüpfung.
1 Artikel hat mehrere Lieferanten.
1 Lieferant etc.

Jetzt will ich eine Liste der Artikel in PHP ausgeben lassen in der via <form> Lieferanten zugeordnet oder gelöscht werden können.

Also:
(SQL Query gekürzt)
PHP:
artikel.PRIMARY, 
artikel.bezeichnung,
lieferbedingungen.lieferant

FROM artikel

JOIN artikel2preise ON artikel.PRIMARY = artikel2preise.artikelid
JOIN lieferbedingungen ON artikel2preise.lieferbedingungen = lieferbedingungen.PRIMARY

GROUP BY artikel.PRIMARY

Ich erhalte also eine Liste mit Artikeln und den Lieferanten. Jeden Artikel 1 mal, egal wieviele Lieferanten. Wie kann ich mir aussuchen welchen Lieferanten er in das GROUP übernimmt. Ich hätte da gerne den Lieferanten stehen der grade bearbeitet wird sonst weise ich ihn aus versehen doppelt zu.

Danke für die Hilfe.
 
Du brauchst eine zusätzliche WHERE-Bedinung mit der du den Lieferanten auswählst (id oder sowas musst du ja haben)
 
??
Das verstehe ich nicht ganz.
Eine Komplette 2te SELECT Anfrage oder eine weitere WHERE Bedinung.
Das mit weiterer WHERE hab ich schon probiert. Da "groupt" SQL es wieder mit irgendeinem Lieferanten.
Kannst die Abfrage schnell posten bitte?
 
erstmal brauchst du ein Formular, mit zb einem Selectfeld mit deine Lieferanten, dann schickst du das ergebnis an die gleiche seite und holst es mit post oder get wieder rein, die varieble knallst du dann in die WHERE abfrage und gibst dann deine ergebnisse mit ner while aus
 
Ich muss das etwas unkomplizierter beschreiben glaube ich.
Also ich habe 2 Tabellen.

Artikel:
1
2
3

Lieferanten:
1=>A
2=>A
1=>B
2=>B
1=>C
3=>C

Was muss ich SQL schreiben?
Ich will eine Ausgabe die folgendes ausgibt:

1 = B
2 = B
3 = C

Wenn ich mit einer Weiteren Where Klausel frage dann wird das C weggelassen.
Tu ich es nicht dann "groupt" er das B weg weil das A vor dem B steht. Dann sieht es so aus:

1 = A
2 = A
3 = C
 
Ich muss das etwas unkomplizierter beschreiben glaube ich.
Also ich habe 2 Tabellen.

Artikel:
1
2
3

Lieferanten:
1=>A
2=>A
1=>B
2=>B
1=>C
3=>C

Was muss ich SQL schreiben?
Ich will eine Ausgabe die folgendes ausgibt:

1 = B
2 = B
3 = C

Wenn ich mit einer Weiteren Where Klausel frage dann wird das C weggelassen.
Tu ich es nicht dann "groupt" er das B weg weil das A vor dem B steht. Dann sieht es so aus:

1 = A
2 = A
3 = C

Ich versteh auch nicht nach welchem Muster du da joinen willst.
 
In den Lieferanten stehen 2 Werte nämlich die 1 und A also 1=>A
Die 1 ist gleich der PRIMARY von Artikel.
Da soll gejoint werden.
Da ich aber jeden Artikel nur einmal anzeigen möchte mache ich ein GROUP.
Jetzt wird bei Group die gejointe Tabelle gekürzt. Weil ja A und B Artikel 1 Liefern.
Ich möchte das Artikel 1 mit Lieferant B angezeigt wird. Und Lieferant A weggekürzt wird.
Ich möchte aber auch noch die Artikel sehen in denen Lieferant B nicht steht. Also Artikel 3 zum Beispiel.

Artikel:
PRIMARY
1
2
3

Lieferanten:
ID=>name
1=>A
2=>A
1=>B
2=>B
1=>C
3=>C


PHP:
SELECT artikel.PRIMARY, lieferanten.name

from artikel, lieferanten

JOIN lieferanten ON lieferanten.id = artikel.PRIMARY

ZEIGE lieferant.name = 'B' bevorzugt.

Gewünschte Ausgabe:
1 = B
2 = B
3 = C

In echt erzieltes Ergebnis:

1 = A
2 = A
3 = C
 
Zuletzt bearbeitet:
In den Lieferanten stehen 2 Werte nämlich die 1 und A also 1=>A
Die 1 ist gleich der PRIMARY von Artikel.
Da soll gejoint werden.
Da ich aber jeden Artikel nur einmal anzeigen möchte mache ich ein GROUP.
Jetzt wird bei Group die gejointe Tabelle gekürzt. Weil ja A und B Artikel 1 Liefern.
Ich möchte das Artikel 1 mit Lieferant B angezeigt wird. Und Lieferant A weggekürzt wird.
Ich möchte aber auch noch die Artikel sehen in denen Lieferant B nicht steht. Also Artikel 3 zum Beispiel.
Jetzt hast Du Dein Beispiel nochmal in lang erklärt. Die Aussage bleibt die gleiche. Die gelieferten Daten sind unzureichend, um die gewünschte Ausgabe zu erzeugen.

Woran unterscheiden sich A und B, dass B plötzlich bevorzugt werden soll?
 
Ich lasse in dem Jeweiligen Lieferanten die Artikel anzeigen und dort kann man dann anklicken ob das von dem aktuell gewählten Lieferanten, in unserem Fall B, geliefert wird.
Wird jetzt A statt B angezeigt will man Lieferant B den Artikel nochmal zuweisen da er ja nicht als Zugewiesen angezeigt wird.
Nicht Zugewiesene Artikel (3) müssen aber auch angezeigt werden damit Sie neu zugewiesen werden können.

Thread schließen, ich hab ein PHP Workaround geschrieben. Leider hat keine Antwort geholfen bzw. es gibt den SQL Befehl anscheinend nicht.
 
Ich lasse in dem Jeweiligen Lieferanten die Artikel anzeigen und dort kann man dann anklicken ob das von dem aktuell gewählten Lieferanten, in unserem Fall B, geliefert wird.
Wird jetzt A statt B angezeigt will man Lieferant B den Artikel nochmal zuweisen da er ja nicht als Zugewiesen angezeigt wird.
Nicht Zugewiesene Artikel (3) müssen aber auch angezeigt werden damit Sie neu zugewiesen werden können.
Wenn Du einen Lieferanten selektierst, dann ist es einfach die vom ihm gelieferten Artikel anzuzeigen. Das war nicht Deine Frage.
Wenn Du einen Artikel selektierst, dann ist es einfach die Lieferanten des Artikels anzuzeigen. Das war auch nicht Deine Frage.
Wenn Du einen Lieferanten selektiert hast, dann ist es einfach alle Artikel anzuzeigen, die er noch nicht liefert. Das war auch nicht Deine Frage.
Wenn Du einen neuen Lieferanten für einen Artikel eintragen willst, dann ist es einfach die Lieferanten anzuzeigen, die diesen noch nicht liefern. Das war irgendwie vielleicht Deine Frage, oder auch nicht.
GROUP BY ist bis hier noch nicht im Einsatz.

Thread schließen, ich hab ein PHP Workaround geschrieben. Leider hat keine Antwort geholfen bzw. es gibt den SQL Befehl anscheinend nicht.
Was nicht an SQL oder den Antworten liegt, sondern daran, dass Du scheinbar nicht in der Lage bist Dein Problem klar zu formulieren.
 
In deinem Fall brauchst du 2 Selectanfragen. Die erste die alle Artikel die A liefert selektiert (Join über Artikel und Lieferbedinungen mit lieferant = A) und dann alle die nicht von A geliefert werden.

Durch deine Tabellenstruktur sehe ich noch nicht so recht durch. Aber du müßtest ja eine Tabelle artikel, lieferant und rel_artikel_lieferant haben. Letztere speichert die Beziehung (also wer liefert) zwischen artikel und lieferant.

Artikel die nicht von A geliefert werden könntest du dann so bekommen:

Code:
SELECT * FROM artikel
JOIN rel_artikel_lieferant USING(artikel_id)
WHERE artikel_id NOT IN 
   (SELECT artikel_id FROM rel_artikel_lieferant
    WHERE lieferant_id = 'A')
 
Ja mit ein bissi abstand muss ich euch recht geben...
Ich bin dann immer schon so im Thema das ich nicht mehr in der Lage bin das Problem richtig zu umschreiben. Sorry nochmal und 1000 Dank an alle die mir geholfen haben.
 
Zurück
Oben