MySql Abfrage deutschlich schneller machen!

Hast du meine Abfrage ausprobiert?

Wiso Schreibst du die Anzahl usw immer in die eine Tabelle? Du könntest sie doch einfach Mitselektieren (siehe meine Abfrage).
Wenn das zu langsam ist solltest du dir Trigger anschauen. Damit kannst du bei jedem insert/delete in weilhammer_datenbank die entsprechenden Summen aktualisieren.
http://dev.mysql.com/doc/refman/5.1/de/create-trigger.html
Sonst hast du immer das Problem dass die Daten in weilhammer_lager_2 nur richtig sind wenn dein Script gelaufen ist oder wenn du das aktualisieren zusätzlich in deine Anwendung einbaust, aber besser machst du es direkt auf Datenbankebene.
 
Hi franz007

Da ich mit JOINS NOCH nichts anfangen kann weiß ich nicht wie ich die Abfrage anwenden kann :(

Es sagt dir wieviele Datensätze in jedem Regal liegen und wieviele meter das braucht.

Ich brauche nicht die Anzahl der Datensätze im Regal sondern pro Fach.

In die Tabelle weilhammer_lager_2 gehen und soll im Ersten Datensatz
lager,regal,höhe,fach sich merken.
Anschließend mit der Information ind die weihammer_datenbank gehen und alle Datensätze suchen die
in selben lager,regal,höhe,fach liegen.
Die Anzahl der gefundenen Datensätze sollen in der Tabelle weilhammer_lager_2
im Feld anzahl_ordner gespeichert werden.
Gleichzeitig soll in den gefundenen Datensätze in der Tabelle weilhammer_datenbank
die Summe des Feldes meter in das Feld anzahl_meter in die Tabelle weilhammer_lager_2 eingetragen werden.

Danke für deine Antwort.

Gruß Thomas
 
Hallo

Die Abfrage selektiert dir ja genau die Anzahl und die Summe pro Fach (hab mich oben zu ungenau ausgedrückt)

Da ich mit JOINS NOCH nichts anfangen kann [...]

Ich habe ja nichts anderes gemacht als deine 2 Abfragen zu einer zusammenzubauen.
Ohne joins wirst du bei solchen Abfragen (Performancetechnisch) nicht weit kommen.

Ich verweise hier einfach mal auf externe Lektüre:
http://www.sql-tutorial.net/SQL-JOIN.asp
http://en.wikipedia.org/wiki/Join_(SQL)

[...] weiß ich nicht wie ich die Abfrage anwenden kann
Einfach ausführen wie jede andere Abfrage?

Kleinen Fehler korrigiert:
SQL:
SELECT l.lager, l.regal, l.hoehe, l.fach
    , COUNT(*) AS anzahl
    , SUM(CASE WHEN d.meter IS NULL THEN 0 ELSE d.meter) AS meter
FROM weilhammer_lager_2 l 
LEFT JOIN weilhammer_datenbank d ON 
    d.lager = l.lager AND d.regal = l.regal AND d.hoehe = l.hoehe AND d.fach = l.fach
WHERE lager = '2' AND regal = '1' AND hoehe = '1' AND fach = '1'
GROUP BY l.lager, l.regal, l.hoehe, l.fach
 
HI franz007

Bei der Abfrage ist ein Fehler aufgetreten.

Ein Fehler ist aufgetreten.
Query:

SELECT l.lager, l.regal, l.hoehe, l.fach , COUNT(*) AS anzahl ,
SUM(CASE WHEN d.meter IS NULL THEN 0 ELSE d.meter) AS meter
FROM weilhammer_lager_2 l LEFT JOIN weilhammer_datenbank d ON
d.lager = l.lager AND d.regal = l.regal AND d.hoehe = l.hoehe AND d.fach = l.fach
WHERE lager = '2' AND regal = '1' AND hoehe = '1' AND fach = '1' GROUP BY l.lager, l.regal, l.hoehe, l.fach


Error: (1064)

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 ') AS meter
FROM weilhammer_lager_2 l LEFT JOIN weilhammer_datenbank d ON
d.lag' at line 2

Gruß Thomas
 
Das Zeichen ist eine 1. Wenn ich die lösche erscheint der Fehler:

SELECT l.lager, l.regal, l.hoehe, l.fach , COUNT(*) AS anzahl ,
SUM(CASE WHEN d.meter IS NULL THEN 0 ELSE d.meter) AS meter
FROM weilhammer_lager_2 LEFT JOIN weilhammer_datenbank d ON
d.lager = l.lager AND d.regal = l.regal AND d.hoehe = l.hoehe AND d.fach = l.fach
WHERE lager = '2' AND regal = '1' AND hoehe = '1' AND fach = '1' GROUP BY l.lager, l.regal, l.hoehe, l.fach


Error: (1064)

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 ') AS meter
FROM weilhammer_lager_2 LEFT JOIN weilhammer_datenbank d ON
d.lager' at line 2
 
Es fehlt das END bei den cases. :)

SQL:
SELECT l.lager, l.regal, l.hoehe, l.fach
    , COUNT(*) AS anzahl
    , SUM(CASE WHEN d.meter IS NULL THEN 0 ELSE d.meter END) AS meter
FROM weilhammer_lager_2 l 
LEFT JOIN weilhammer_datenbank d ON 
    d.lager = l.lager AND d.regal = l.regal AND d.hoehe = l.hoehe AND d.fach = l.fach
WHERE lager = '2' AND regal = '1' AND hoehe = '1' AND fach = '1'
GROUP BY l.lager, l.regal, l.hoehe, l.fach
 
Hi franz007

Vielen Dank für deine Mühe:)

Nun erhalte ich den Fehler:

Error: (1052)
Column 'lager' in where clause is ambiguous

Liegt das an der MySql Version.

Gruß Thomas

Ein Fehler ist aufgetreten.
Query:

SELECT l.lager, l.regal, l.hoehe, l.fach
, COUNT(*) AS anzahl
, SUM(CASE WHEN d.meter IS NULL THEN 0 ELSE d.meter END) AS meter
FROM weilhammer_lager_2 l
LEFT JOIN weilhammer_datenbank d ON
d.lager = 'l.lager' AND d.regal = 'l.regal' AND d.hoehe = 'l.hoehe' AND d.fach = 'l.fach'
WHERE lager = '2' AND regal = '1' AND hoehe = '1' AND fach = '1'
GROUP BY l.lager, l.regal, l.hoehe, l.fach


Error: (1052)

Column 'lager' in where clause is ambiguous
 
Also ein bischen Eigeninitiative ist schon auch erwünscht.
Der Fehler sagt doch schon "lager" nicht eindeutig ist, weil es in beiden Tabellen vorkommt.
Hier musst du den Alias anfügen, welcher im ersten Select-Teil angegeben wurde, sonst weiß MySQL durch den JOIN nicht aus welcher Tabelle sie "lager" verwenden soll.

WHERE l.lager = '2' AND l.regal = '1' AND l.hoehe = '1' AND l.fach = '1'
könnte richtig sein, da ich aber nicht genau weiß wie die Tabellen aufgebaut sind und wie der Query greift, könnte es richtig sein.
Ansonsten mit den anderen Aliasen versuchen "d.lager,d.regal usw...
 
Zurück