Variablenspeicher

thomy800

Erfahrenes Mitglied
Hallo.
Ich wollte mal fragen, ob und wie es möglich ist Variablen als Zwischenspeicher zu verwenden. Also hier mal ein Beispiel:

SQL:
SELECT * FROM keks WHERE [zwischenspeicher=variable1*variable2/variable3] zwischenspeicher<variable4 AND zwischenspeicher>variable5;

Sinn ist, dass "zwischenspeicher" in der Bedingung nicht 2mal berechnet werden muss, sondern nur einmal. Geht das?

PS: zwischenspeicher soll NICHT in der Tabelle stehen. Die Variable soll nur für die Bedingungen im WHERE verwendet werden.
 
Zuletzt bearbeitet:
Hi,

das geht, soweit ich weiß, nur mit einem Prepared Statement. Beispiel:

SQL:
SET @var = 5;
PREPARE stmt FROM 'SELECT * FROM tabelle WHERE spalte1 < ? AND spalte2 > ?';
EXECUTE stmt USING @var, @var;

LG
 
Hi,

wie wär's, wenn Du solche Dinge einfach mal ausprobierst...
Theoretisch ja. Aber wozu soll das gut sein? Kannst Du mal erklären, was Du überhaupt vorhast?

LG
 
Hab in meiner DB ne etwas komplizierte Rechnung und 3 weitere Variablen sind (bei Update) von dem Ergebnis abhängig...
Und da ziehmlich viele Einträge mit diesem Vorgang bearbeitet werden, wäre es optimal, wenn man das ganze durch Verwendung von Speicher beschleunigen könnte.
(Das Ergebnis dieser Rechnung ist aber von Zeile zu Zeile unterschiedlich, also nicht vorab für alle Einträge verwendbar.)
 
Hi,

Hab in meiner DB ne etwas komplizierte Rechnung und 3 weitere Variablen sind (bei Update) von dem Ergebnis abhängig...
Und da ziehmlich viele Einträge mit diesem Vorgang bearbeitet werden, wäre es optimal, wenn man das ganze durch Verwendung von Speicher beschleunigen könnte.

Das hilft nicht weiter. Was für eine Rechnung ist das? Wofür? Und von was für Variablen sprichst Du? Meinst Du Tabellenfelder?

(Das Ergebnis dieser Rechnung ist aber von Zeile zu Zeile unterschiedlich, also nicht vorab für alle Einträge verwendbar.)

Dann kannst Du das vergessen.

LG
 
Achso, schade.
Naja, ich berechne die vergangene Zeit seit dem letzten Eintrag und die anderen Spalten werden danach angepasst.
Schade, hätte nicht gedacht, dass es sowas nicht gibt...
Aber trotzdem großes Danke :)
Und ja, Tabellenfelder.
 
Zuletzt bearbeitet:
Hi,

Naja, ich berechne die vergangene Zeit seit dem letzten Eintrag und die anderen Spalten werden danach angepasst.

was ist denn an einem simplen DATEDIFF oder TIMEDIFF kompliziert? Was Du machen könntest ist, den aktuellen Timestamp (NOW()) in einer Variablen speichern, dann muss der nicht immer neu berechnet werden.
Poste doch mal Deine Abfrage, vielleicht kann man ja so erkennen, wo der Flaschenhals steckt.

LG
 
Dies ist eine Mischung aus PHP und Mysql:
SQL:
UPDATE table1 
				JOIN table2
            ON table1.ID=geid 
			SET 
				e=IF(TIMESTAMPDIFF(SQL_TSI_SECOND,lastcheck,FROM_UNIXTIME($now))>=bz,m,s+TIMESTAMPDIFF(SQL_TSI_SECOND,lastcheck,FROM_UNIXTIME($now))*(m- s)/bz) ,
				b=IF(TIMESTAMPDIFF(SQL_TSI_SECOND,lastcheck,FROM_UNIXTIME($now))>=bz,bp,bb),
				lastcheck=IF(TIMESTAMPDIFF(SQL_TSI_SECOND,lastcheck,FROM_UNIXTIME($now))>=bz,TIMESTAMP(lastcheck,FROM_UNIXTIME(bz)) ,lastcheck)
			WHERE b=bb
Wie man sieht, wird 3mal
SQL:
TIMESTAMPDIFF(SQL_TSI_SECOND,lastcheck,FROM_UNIXTIME($now))>=bz
berechnet, was ich etwas unschön finde...



PS: und es ist absichtlich $now anstatt NOW(), weil der Zeitpunkt schon vorher bestimmt wurde (also im Prinzip eigentlich nicht mehr now ist).
 
Hi,

es könnte vielleicht ganz hilfreich sein, wenn man weiß, was diese ganzen Spalten eigentlich bedeuten. Was für eine Logik implementierst Du da?

Dass Du Felder in einer Zeile abhängig von anderen Feldern neu berechnest, bzw. einfach auf den Wert einer anderen Spalte setzt, ist schon etwas merkwürdig und könnte schlechtes DB-Design bedeuten. Dazu müsste man aber wie gesagt den Sinn dahinter kennen.

Wenn diese Abfrage ungewöhnlich langsam ist, liegt es aber wohl nicht daran, dass diese eine simple Formel drei mal berechnet werden muss.

LG
 

Neue Beiträge

Zurück