DB für Lagertechnik

forum-user

Mitglied
Hallo Leute, ich weis das es eine simple Frage ist, aber bei mir klemmts grad geistig.
Ich habe zwei Tabellen:
Tabelle 1 (customer) besteht aus customer_id (auto inc. prim.key), customer_name
Tabelle 2 (stock) besteht aus acticle_id (auto inc. prim.key), article_number, article_serial, bin, customer_id

Die Abfrage schaut nun nach was ähnlich der Artikel bzw. der Seriennummer aussieht. Dies mache ich via
Code:
SELECT * FROM stock
WHERE article_number LIKE '$artikel'
OR article_serial LIKE '$artikel'
ORDER BY customer_id

Wie die Abfrage es bereits sagt, wird die Ausgabe nach customer_id sortiert. Aber ich will nicht die customer_id es sehen, sondern nach customer_name.Wo muss ich mit der Abfrage weiter ansetzen.

Bei folgender Abfrage stimmt das Ergebins nämlich nicht:
Code:
SELECT stock.article_number, stock.article_serial, stock.bin, stock.customer_id, customer_name
FROM stock, customer
WHERE stock.article_number LIKE '%290027%'
OR stock.article_serial LIKE '%290027%'
AND stock.customer_id = customer.customer_id
LIMIT 0 , 30;
 
Zuletzt bearbeitet:
Du musst einen JOIN machen, um die Tabellen customer und stock zu verbinden, damit du an den customer_name kommen kannst. Ungefähr so:

SQL:
SELECT s.*,c.customer_name FROM stock s
INNER JOIN customer c ON c.customer_id = s.customer_id
WHERE s.article_number LIKE '$artikel'
OR s.article_serial LIKE '$artikel'
ORDER BY s.customer_id
 
Jetzt klappt zwar die Abfrage, aber es werden alle Artikel angezeigt, auch welche bereits ausgebucht wurden.
Das Ausbuchen erfolgt über die Tabelle stock... mit dem Feld active...
Solange ein Artikel nur eingelagert wird, steht im Feld active nur "Null". Beim Ausbuchen steht eine "1".

Code:
SELECT s.*,c.customer_name 
FROM stock s
INNER JOIN customer c ON c.customer_id = s.customer_id
WHERE s.article_number LIKE '$artikel'
OR s.article_serial LIKE '$artikel'
AND s.active IS NULL
ORDER BY s.customer_id

Wo haperts da schon wieder...
 
Du musst da wohl Klammern setzen, denn das AND bezieht sich auf "s.article_serial LIKE '$artikel'
AND s.active IS NULL", das willst du nicht kombinieren, sondern das OR - AND ist stärker als OR (hat eine höhere Priorität). Also musst du klammern:

SQL:
SELECT s.*,c.customer_name 
FROM stock s
INNER JOIN customer c ON c.customer_id = s.customer_id
WHERE (s.article_number LIKE '$artikel'
OR s.article_serial LIKE '$artikel')
AND s.active IS NULL
ORDER BY s.customer_id

Hier ist übrigens eine Liste über die Operatoren-Gewichtung: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html zumindest wenn du MySQL benutzt.
 
Muss mal rasch das Ding hier aufwärmen.
Bei der Abfrage
PHP:
SELECT s.* , c.mitarbeiter_name, d.customer_name 
FROM stock s
INNER JOIN mitarbeiter c ON c.mitarbeiter_id = s.employee
INNER JOIN customer d ON d.customer_id = s.customer_id
WHERE (s.customer_id = '$customer')
ORDER BY s.article_serial AND s.bin ASC

Mir alles so aufgelistet wie ich es benötige und das ist bei dieser Abfrage auch so gewünscht:
Artikelnummer - Seriennummer - Lagerort - Datum Eintrag - Wer hat es eingetragen


Nun muss genannte Abfrage umgestellt werden damit noch beim Ausgang aufgezählt wird, wer hat es ausgetragen, wann

Wenn ich noch einen Inner Join mache, erhalte ich nur 2 Aufzählungen, das ist aber nicht gewollt.
Ich muss das alles in einer Tabelle darstellen.
Wo klemmts da grad bei mir.



PHP:
SELECT s.* , c.mitarbeiter_name, d.customer_name, e.mitarbeiter_name 
FROM stock s
INNER JOIN mitarbeiter c ON c.mitarbeiter_id = s.employee
INNER JOIN customer d ON d.customer_id = s.customer_id
INNER JOIN mitarbeiter e ON e.mitarbeiter_id = s.order_employee
WHERE (s.customer_id = '$customer')
ORDER BY s.article_serial AND s.bin ASC
 
Zuletzt bearbeitet:
Wie wird denn definiert, was ausgegangen ist? Über eine extra Datenbank-Tabelle oder eine Spalte in stock? Erzähl mal was über die Datenbankstruktur.
 
Tabelle Stock besteht aus:
article_id, article_number, article_serial, entry_time, bin, employee, customer_id, active, order_number, order_time ,order_employee

Tabelle Mitarbeiter:
mitarbeiter_id, mitarbeiter_name

Tabelle Customer:
customer_id, customer_name

Angezeigt soll werden:

Artikelnummer, Seriennummer, Lagerort, Eintrag-datum, Mitarbeiter, Auftragsnummer, Ausgangsdatum, Mitarbeiter der Ausgangsbuchung.

Das ganze muss aber nur nach Customer aufgeführt werden auch wenn kein Ausgang vorhanden ist, quasi auch wenn Auftragsnummer, Ausgangsdatum, Mitarbeiter der Ausgangsbuchung leer ist
 

Neue Beiträge

Zurück