From benedikt at quirmbach.de Fri May 5 12:05:14 2006 From: benedikt at quirmbach.de (Benedikt Quirmbach) Date: Fri, 5 May 2006 12:05:14 +0200 Subject: Tabellen-Abgleich Message-ID: <06D70856-E9A3-442A-9000-7BA7717269B2@quirmbach.de> Hallo, ich habe zwei Tabellen: eine Kunden-Tabelle, in der unter anderem auch die Bundesländer stehen. Und neuerdings eine Bundesland-Tabelle mit Bundesländern. Wie das manchmal so ist bei schlecht gepflegten Datenbanken, gibt es Kunden-Datensätze mit Bundesland-Angaben, die nicht mit der neuen Bundesland-Tabelle zusammenpassen. Ich brauche also eine Abfrage, die mir alle Kunden liefert, bei denen die Angaben im Feld "bundesland" nicht in der Bundesland-Tabelle im Feld "bundesland" vorkommen. Dann kann ich die hoffentlich wenigen Fehler per Hand berichtigen... Eine relationale Verbindung der beiden Tabellen möchte ich nicht herstellen, da ich dann alle möglichen Scripte ändern müsste... Mit der neuen Bundesland-Tabelle gibt es auch ein neues Admin-Tool, dass hoffentlich in Zukunft falsche Eintragungen vermeidet. Vielen Dank im voraus für jede Hilfe Benedikt -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From benedikt at quirmbach.de Fri May 12 16:55:58 2006 From: benedikt at quirmbach.de (Benedikt Quirmbach) Date: Fri, 12 May 2006 16:55:58 +0200 Subject: =?ISO-8859-1?Q?L=FCcken_in_der_Z=E4hlung?= Message-ID: Hallo, ich habe eine Tabelle mit einem Feld "nummer" (int). Es handelt sich da um ein Schlüsselfeld. Die Nummern müssen also eindeutig sein. Bei der Vergabe der Nummern sind im Laufe der Zeit Lücken entstanden. Um bei neuen Datensätzen nicht ins unendliche zu zählen, brauche ich eine Abfrage, die mir die erste Lücke in der Nummerierung zeigt, also die kleinste nicht benutzte Zahl (aber > 0) im Feld "nummer". Wie bekomme ich das heraus? Benedikt -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From andreas.kretschmer at schollglas.com Fri May 12 18:29:19 2006 From: andreas.kretschmer at schollglas.com (Andreas Kretschmer) Date: Fri, 12 May 2006 18:29:19 +0200 Subject: =?iso-8859-1?Q?L=FCcken_in_der_Z=E4hlu?= =?iso-8859-1?Q?ng?= In-Reply-To: References: Message-ID: <20060512162919.GA7645@webserv.wug-glas.de> am 12.05.2006, um 16:55:58 +0200 mailte Benedikt Quirmbach folgendes: > Hallo, > > ich habe eine Tabelle mit einem Feld "nummer" (int). Es handelt sich da um > ein Schlüsselfeld. Die Nummern müssen also eindeutig sein. > > Bei der Vergabe der Nummern sind im Laufe der Zeit Lücken entstanden. Um Das tut Deiner Bedingung der Eindeutigkeit keinen Abbruch. Unter Systemen wie ORA oder PostgreSQL verwendet man Sequencen, und da kann das auch passieren. Deine 'nummer' ist eine DB-interne Sache und kein Objekt der realen Wirklichkeit. Und selbst wenn es sich z.B. um Rechnungsnummern handelt, dann würde die eindeutige Sortierordnung durch Deinen gleich folgenden Wunsch den Bach runter gehen... > bei neuen Datensätzen nicht ins unendliche zu zählen, brauche ich eine Wann ist denn bei INT Schluß, und gibt es Datentypen, die größer sind? > Abfrage, die mir die erste Lücke in der Nummerierung zeigt, also die > kleinste nicht benutzte Zahl (aber > 0) im Feld "nummer". > > Wie bekomme ich das heraus? test=# select * from t1; i --- 1 2 3 5 6 (5 rows) test=# select min(y) from generate_series(1,10) as y where y not in (select i from t1); min ----- 4 (1 row) Ich weiß, MySQL hat kein generate_series(), aber das kann man sich basteln. Ansonsten, wie gesagt, du betätigst Dich als Schönheitsoperateur. Bei hinreichend großen Tabellen dürften Inserts an Geschwindigkeit leiden... -- Andreas Kretschmer (Kontakt: siehe Header) Heynitz: 035242/47215, D1: 0160/7141639 GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net === Schollglas Unternehmensgruppe === -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From technik at echtwahr.com Wed May 17 11:40:58 2006 From: technik at echtwahr.com (Technik via echtwahr.com - Neuer Server) Date: Wed, 17 May 2006 11:40:58 +0200 Subject: Tabellenlayout =?ISO-8859-1?Q?=20f=FCr?= eine Suche Message-ID: <000601c67996$00b14270$1601a8c0@shivaball> Hallo Liste, ich arbeiten zur Zeit mit dem Full-Text Index, alerdings hat der einige Beschränkungen die ich so nicht weg bekommen against('title') match('*tasse*' in boolean mode) Ich hab dann ein anderes Layout versucht: Keywords Id Word varchar(64) Word_in_doc Id Keyword_id Doc_id Allerdings wächst mir da die Tabelle ins unermessliche und die Performance ist da nicht wirklich so gut. Hat jemand eine Idee für mich wie ich die Full-Text Beschränkungen umgehen kann Mit freundlichen Grüssen Thomas Goik -- Ihre Auktionsseiten im Internet http://www.auxion.de http://www.Xhammer.de -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From lists at sebastianmendel.de Thu May 18 08:50:20 2006 From: lists at sebastianmendel.de (Sebastian Mendel) Date: Thu, 18 May 2006 08:50:20 +0200 Subject: Tabellenlayout =?ISO-8859-15?Q?f=FCr_eine_Suche?= In-Reply-To: <000601c67996$00b14270$1601a8c0@shivaball> References: <000601c67996$00b14270$1601a8c0@shivaball> Message-ID: <446C192C.8010703@sebastianmendel.de> Technik via echtwahr.com - Neuer Server schrieb: > Hallo Liste, > > ich arbeiten zur Zeit mit dem Full-Text Index, alerdings hat der einige > Beschränkungen die ich so nicht weg bekommen > against('title') match('*tasse*' in boolean mode) > > Ich hab dann ein anderes Layout versucht: > Keywords > Id > Word varchar(64) > > Word_in_doc > Id > Keyword_id > Doc_id > > Allerdings wächst mir da die Tabelle ins unermessliche und die Performance > ist da nicht wirklich so gut. Sollte aber eigentlich schon schnell funktionieren. Indexe hast du RICHTIG gesetzt? Was sagt denn ein 'EXPLAIN' dazu? > Hat jemand eine Idee für mich wie ich die Full-Text Beschränkungen umgehen > kann Du hast vergessen zu schreiben was denn dein Problem mit der Volltext-Suche ist. -- Sebastian Mendel www.sebastianmendel.de -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From technik at echtwahr.com Thu May 18 11:41:36 2006 From: technik at echtwahr.com (Technik via echtwahr.com - Neuer Server) Date: Thu, 18 May 2006 11:41:36 +0200 Subject: Tabellenlayout =?ISO-8859-1?Q?=20f=FCr?= eine Suche In-Reply-To: <446C192C.8010703@sebastianmendel.de> Message-ID: <003001c67a5f$4201bdd0$1601a8c0@shivaball> Hallo Sebastian, > Du hast vergessen zu schreiben was denn dein Problem mit der > Volltext-Suche ist. against('title') match('*tasse*' in boolean mode) die boolesche Suche von Fulltext Indexen lässt keine Suche im Stil where title LIKE '%tasse%' zu > > Allerdings wächst mir da die Tabelle ins unermessliche und die > Performance > > ist da nicht wirklich so gut. > > Sollte aber eigentlich schon schnell funktionieren. Indexe hast du > RICHTIG gesetzt? Was sagt denn ein 'EXPLAIN' dazu? Tabellen Layout: CREATE TABLE `keywords` ( `key_id` int(9) NOT NULL auto_increment, `keyword` varchar(64) NOT NULL default '', PRIMARY KEY (`key_id`), UNIQUE KEY `key_id` (`key_id`), UNIQUE KEY `keyword` (`keyword`), ) ENGINE=MyISAM DEFAULT CHARSET=latin1 Die Performance bei suchen nach Und Oder Nicht Kombinationen ist da mein Problem Suchen von wegen +%tasse% -%becher% untertassen Ich hab dafür keinen guten Code, der mir diese Daten schnell ausliest Eventuell weiß du ja etwas, das mir da weiter hilft Mit freundlichen Grüssen Thomas Goik -- Ihre Auktionsseiten im Internet http://www.auxion.de http://www.Xhammer.de -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From gernot.adams at imformgroup.com Fri May 19 08:51:42 2006 From: gernot.adams at imformgroup.com (Gernot Adams) Date: Fri, 19 May 2006 08:51:42 +0200 Subject: Access2000 und SQL5.0 Stored Procedures In-Reply-To: References: Message-ID: <446D6AFE.4010203@imformgroup.com> hi, Matthias Köstler wrote the following on 18.05.2006 11:56: > weiß jemand, wie ich von Access 2000 auf eine SP in MySQL 5.0 zugreifen > kann. > sollte eigentlich so gehen: erstelle eine Pass-Through-Abfrage in Access und schreibe dort: exec DeineSP. gruß gernot -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From benedikt at quirmbach.de Mon May 22 16:22:17 2006 From: benedikt at quirmbach.de (Benedikt Quirmbach) Date: Mon, 22 May 2006 16:22:17 +0200 Subject: Suche in 2 Tabellen Message-ID: <0C180282-8344-48BD-B911-C532C2065EA3@quirmbach.de> Hallo, ich habe 2 Tabellen. Die Datensätze in beiden Tabellen haben ein Feld mit einer Nummer (INT). Ich suche alle Datensätze in Tabelle 1, deren Nummer in Tabelle 2 nicht vorkommt. Wie geht das ? -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From liste at trick-box.de Mon May 22 16:41:59 2006 From: liste at trick-box.de (Stefan Brueckmann) Date: Mon, 22 May 2006 16:41:59 +0200 Subject: =?iso-8859-15?q?Bl=E4ttern_bei_Volltextsuche_in_zwei?= Tabellen Message-ID: <200605221641.59344.liste@trick-box.de> Hallo Liste, Ich habe zwei Datenbanktabellen. Beide habe ein Volltextfeld wo viel interessantes drin steht. Nun möchte ich die Textfelder beider Tabellen mit einer Abfrage durchsuchen. Ok kein besonderes Problem. Nur wenn es mehr als z.B. 30 Ergebnisse sind, dann würde ich gerne in den Ergebnissen blättern und da fängt mein Problem an. Bisher habe ich die Blätterfunktion so gestaltet in dem ich bei jedem weiterblättern aufruf den LIMIT Wert entsprechend verändert habe. Aber wie mache ich das bei den beiden verschiedenen Tabellen? Erst die eine durchblättern und dann die andere? Mit freundlichen Grüßen Stefan Brückmann -- Ein guter Gedanke stählet des Mannes Herz. (Fiesco) Friedrich Schiller -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From andreas.kretschmer at schollglas.com Mon May 22 21:20:57 2006 From: andreas.kretschmer at schollglas.com (Andreas Kretschmer) Date: Mon, 22 May 2006 21:20:57 +0200 Subject: Suche in 2 Tabellen In-Reply-To: <0C180282-8344-48BD-B911-C532C2065EA3@quirmbach.de> References: <0C180282-8344-48BD-B911-C532C2065EA3@quirmbach.de> Message-ID: <20060522192057.GA6791@webserv.wug-glas.de> am 22.05.2006, um 16:22:17 +0200 mailte Benedikt Quirmbach folgendes: > Hallo, > > ich habe 2 Tabellen. > Die Datensätze in beiden Tabellen haben ein Feld mit einer Nummer (INT). > > Ich suche alle Datensätze in Tabelle 1, deren Nummer in Tabelle 2 nicht > vorkommt. > > Wie geht das ? Mit EXCEPT. Select * from foo except [all] select * from bar. Das ist so im SQL_Standard. Ob MySQL das (schon) kann, weiß ich grad nicht. Zum nachlesen: http://www.postgresql.org/docs/8.1/interactive/sql-select.html Andreas -- Andreas Kretschmer (Kontakt: siehe Header) Heynitz: 035242/47215, D1: 0160/7141639 GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net === Schollglas Unternehmensgruppe === -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From norbert at itbw.de Mon May 22 22:23:13 2006 From: norbert at itbw.de (Norbert Pfeiffer) Date: Mon, 22 May 2006 22:23:13 +0200 Subject: =?iso-8859-15?Q?Re:_Bl=E4ttern_bei_Volltextsuche_in_zwei_Tabellen?= References: <200605221641.59344.liste@trick-box.de> Message-ID: <004401c67ddd$8f263c90$16b2a8c0@LionPC> Hallo Stefan, also bei sehr grossen Tabellen mache ich das so, dass ich zuerst alle ID's ermittle, wobei man sich die Sortierreihenfolge merken muss. Selbiges Array kommt in die Session und dann rufe ich nur noch die ersten n-ID's die zweiten n-ID's u.s.w. auf. Das spart unheimlich Performace. Was geschickteres ist mir bislang noch nicht eingefallen. Ach-ja, wenn es mehrer Tabellen sind, kann man im Query die ID mit einer Tabellenkennung erweitern, dann sieht es nach aussen wie eine Tabelle aus. m. b. G. Norbert ___________________ t-net 02682-966898 eplus 0163-3613642 ------------------- e.o.m. -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From lists at sebastianmendel.de Tue May 23 08:49:36 2006 From: lists at sebastianmendel.de (Sebastian Mendel) Date: Tue, 23 May 2006 08:49:36 +0200 Subject: =?ISO-8859-15?Q?Bl=E4ttern_bei_Volltextsuche_in_zwei?= =?ISO-8859-15?Q?_Tabellen?= In-Reply-To: <200605221641.59344.liste@trick-box.de> References: <200605221641.59344.liste@trick-box.de> Message-ID: <4472B080.3090701@sebastianmendel.de> Stefan Brueckmann schrieb: > Hallo Liste, > > Ich habe zwei Datenbanktabellen. > Beide habe ein Volltextfeld wo viel interessantes drin steht. > Nun möchte ich die Textfelder beider Tabellen mit einer Abfrage > durchsuchen. > Ok kein besonderes Problem. > Nur wenn es mehr als z.B. 30 Ergebnisse sind, dann würde ich gerne in > den Ergebnissen blättern und da fängt mein Problem an. > > Bisher habe ich die Blätterfunktion so gestaltet in dem ich bei jedem > weiterblättern aufruf den LIMIT Wert entsprechend verändert habe. > > Aber wie mache ich das bei den beiden verschiedenen Tabellen? > Erst die eine durchblättern und dann die andere? schonmal UNION probiert? -- Sebastian Mendel www.sebastianmendel.de -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From mysql at universalware.de Tue May 23 10:13:54 2006 From: mysql at universalware.de (=?iso-8859-1?Q?Andreas_M=FCller?=) Date: Tue, 23 May 2006 10:13:54 +0200 Subject: =?iso-8859-1?Q?RE:_Bl=E4ttern_bei_Volltextsuche_in_zwei_Tabellen?= In-Reply-To: <004401c67ddd$8f263c90$16b2a8c0@LionPC> Message-ID: Hallo zusammen, ein anderer allgemeiner Weg wäre die Satz IDs der Treffersätze der Suche in einer Tabelle zu hinterlegen. Diese Tabelle bekommt noch einen Verweis auf die konkrete Suche (z.B. Suchbegriff o.ä.) und potentiel ein Timeout. Nun kann man ganz einfach durch einen Join gegen diese Ergebnistabelle auf die Daten zugreifen und so auch einfach ein Blättern durchführen. Ändert sich z.B. etwas an den Daten dann kann man die Suchergebnisse löschen und/oder nach dem Timeout löschen. Was bei all dem zu prüfen wäre ob das Problem bei einem funktionierenden Query-Cache überhaupt relevant ist - natürlich nur falls es sich bei der DB um MySQL handelt. Gruß, Andreas -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From liste at trick-box.de Tue May 23 11:40:22 2006 From: liste at trick-box.de (Stefan Brueckmann) Date: Tue, 23 May 2006 11:40:22 +0200 Subject: =?iso-8859-15?q?Bl=E4ttern_bei_Volltextsuche_in_zwei?= Tabellen In-Reply-To: <004401c67ddd$8f263c90$16b2a8c0@LionPC> References: <200605221641.59344.liste@trick-box.de> <004401c67ddd$8f263c90$16b2a8c0@LionPC> Message-ID: <200605231140.22367.liste@trick-box.de> Hallo Norbert Pfeiffer, am Montag, 22. Mai 2006 22:23 schriebst du: > Hallo Stefan, > > also bei sehr grossen Tabellen mache ich das so, dass ich zuerst > alle ID's ermittle, wobei man sich die Sortierreihenfolge merken > muss. Selbiges Array kommt in die Session und dann rufe ich nur > noch die ersten n-ID's die zweiten n-ID's u.s.w. auf. Das spart > unheimlich Performace. Und wo lässt du die ID's bzw wie ordnest du sie dem Fragenden wieder zu? Ich wollte für die Suche nicht extra eine Session einführen. Mit freundlichen Grüßen Stefan Brückmann -- Spezialisten sind Leute, die nur eine Saite auf ihrer Fidel haben. Henry Miller -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From norbert at itbw.de Tue May 23 12:58:09 2006 From: norbert at itbw.de (Norbert Pfeiffer) Date: Tue, 23 May 2006 12:58:09 +0200 Subject: =?iso-8859-1?Q?Re:_Bl=E4ttern_bei_Volltextsuche_in_zwei_Tabellen?= References: <200605221641.59344.liste@trick-box.de> <004401c67ddd$8f263c90$16b2a8c0@LionPC> <200605231140.22367.liste@trick-box.de> Message-ID: <001701c67e57$ca3df370$6502a8c0@PFEIFFER> Hi Stefan, > Und wo lässt du die ID's bzw wie ordnest du sie dem Fragenden > wieder zu? > Ich wollte für die Suche nicht extra eine Session einführen. hmm, dann muss man jedesmal die ID's suchen und dann die Rekords. Das drueckt etwas die Performace aber wer hat schon mehrere 100.000 Saetze in der Datenbank ... m. b. G. N. Pfeiffer --------------------- normal: 06131-1436094 Notruf: 0163-3613642 --------------------- e.o.f. -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From liste at trick-box.de Tue May 23 15:51:43 2006 From: liste at trick-box.de (Stefan Brueckmann) Date: Tue, 23 May 2006 15:51:43 +0200 Subject: =?iso-8859-1?q?Bl=E4ttern_bei_Volltextsuche_in_zwei?= Tabellen In-Reply-To: <001701c67e57$ca3df370$6502a8c0@PFEIFFER> References: <200605221641.59344.liste@trick-box.de> <200605231140.22367.liste@trick-box.de> <001701c67e57$ca3df370$6502a8c0@PFEIFFER> Message-ID: <200605231551.43893.liste@trick-box.de> Hallo Norbert Pfeiffer, am Dienstag, 23. Mai 2006 12:58 schriebst du: > Hi Stefan, > > > Und wo lässt du die ID's bzw wie ordnest du sie dem Fragenden > > wieder zu? > > Ich wollte für die Suche nicht extra eine Session einführen. > > hmm, > dann muss man jedesmal die ID's suchen und dann die Rekords. Danke, jetzt hast du mich zumindest auf den richtigen Dampfer gesetzt. > Das drueckt etwas die Performace aber wer hat schon mehrere > 100.000 Saetze in der Datenbank ... Das nicht, aber mehrere 100.000 Besucher können das auch bei weniger Datensätzen. ;-) Mit freundlichen Grüßen Stefan Brückmann -- Wer Recht erkennen will, muss zuvor in der richtigen Weise gezweifelt haben. Aristoteles -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From norbert at itbw.de Tue May 23 16:58:19 2006 From: norbert at itbw.de (Norbert Pfeiffer) Date: Tue, 23 May 2006 16:58:19 +0200 Subject: =?iso-8859-1?Q?Re:_Bl=E4ttern_bei_Volltextsuche_in_zwei_Tabellen?= References: <200605221641.59344.liste@trick-box.de> <200605231140.22367.liste@trick-box.de> <001701c67e57$ca3df370$6502a8c0@PFEIFFER> <200605231551.43893.liste@trick-box.de> Message-ID: <003401c67e79$583f8be0$6502a8c0@PFEIFFER> Hi Stefan, > > Das drueckt etwas die Performace aber wer hat schon mehrere > > 100.000 Saetze in der Datenbank ... > Das nicht, aber mehrere 100.000 Besucher können das auch > bei weniger Datensätzen. ;-) stimmt, vor allem, wenn sie sich verabreden. Waehrend dem Boersen-Hype gab es drei Rushhours: - die deutsche Boerse oeffnet - die NewYorker Boerse oeffnet - die Tokioter Borse oeffnet da standen jedesmal alle Yuppis auf der Matte ... ;-) Bis dahin fehlen Dir sicher noch einige PageImpressions. m. b. G. N. Pfeiffer --------------------- normal: 06131-1436094 Notruf: 0163-3613642 --------------------- e.o.f. -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From u.kretschmer.mysql.4t2 at bergruf.de Wed May 24 20:00:15 2006 From: u.kretschmer.mysql.4t2 at bergruf.de (Ulrich Kretschmer) Date: Wed, 24 May 2006 20:00:15 +0200 Subject: =?iso-8859-15?q?Bl=E4ttern_bei_Volltextsuche_in_zwei?= Tabellen In-Reply-To: <200605221641.59344.liste@trick-box.de> References: <200605221641.59344.liste@trick-box.de> Message-ID: <200605242000.15820.u.kretschmer.mysql.4t2@bergruf.de> Am Montag, 22. Mai 2006 16:41 schrieb Stefan Brueckmann: > Ich habe zwei Datenbanktabellen. > Beide habe ein Volltextfeld wo viel interessantes drin steht. > Nun möchte ich die Textfelder beider Tabellen mit einer Abfrage > durchsuchen. (...) > Aber wie mache ich das bei den beiden verschiedenen Tabellen? > Erst die eine durchblättern und dann die andere? Hallo, in so einem Fall sollte eine MERGE-Table nützlich sein: http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html (Habe selbst keine Erfahrungen damit.) Grüße Ulrich Kretschmer -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql From daur at so-nso.de Sun May 28 13:39:58 2006 From: daur at so-nso.de (Tobias Daur) Date: Sun, 28 May 2006 13:39:58 +0200 Subject: update mit ermittelten werten in einer query Message-ID: <1148816398.3729.108.camel@laptd> Hallo zusammen, ich möchte bei einer Bestellverwaltung mit (vereinfacht) den Tabellen artikel, bestellung, bestellposten für jeden Artikel einen Wert (Anzahl, die beim Lieferanten bestellt werden soll: "empfohlen") ermitteln und (das ist mein Problem) diesen in der Tabelle artikel notieren. Hier die Query, mit der ich den Wert ermittle: SELECT DISTINCT IF ( ( IFNULL( SUM( bestellposten.anzahl ) , 0 ) - artikel.stock - artikel.lieanzahl + artikel.lieanzahlgeliefert ) >0, ( IFNULL( SUM( bestellposten.anzahl ) , 0 ) - artikel.stock - artikel.lieanzahl + artikel.lieanzahlgeliefert ), 0 ) + artikel.bestellen AS empfohlen, artikel.idartikel FROM artikel LEFT JOIN bestellung ON bestellung.bes_status <300 LEFT JOIN bestellposten ON bestellposten.artikel_idartikel = artikel.idartikel AND bestellung.idbestellung = bestellposten.bestellung_idbestellung GROUP BY artikel.idartikel Die Query macht folgendes: Sie addiert die Anzahlen der den Artikel betreffenden Bestellposten aus den laufenden (status < 300) Bestellungen (falls es welche gibt - dafür das IFNULL), zieht davon die vorhandene Anzahl (stock) ab, sowie die bereits beim lieferanten bestellte, zzgl. der schon gelieferten. Sie gibt nun eine Artikel-ID (idartikel) und den empfohlen-Wert aus. Ich möchte nun gerne diesen Wert, weil die Abfrage reicht lange dauert, per cronjob ausführen und für jeden Artikel in einem Feld artikel.empfohlen speichern. Meine Frage: Wie kann ich bzw. kann ich überhaupt eine UPDATE-Query formulieren, die die obige Query beinhaltet und dann den ermittelten Wert für jeden Artikel-Datensatz in das Feld 'empfohlen' schreibt? Oder muß ich mir erst mit der Query 30.000 Datensätze zurückgeben lassen, um diese dann mit 30.000 UPDATEs zurückzuschreiben? (Ich hoffe mal, die Antwort ist 'nö' :-)) Danke für Eure Ideen Tobias -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: Dies ist ein digital signierter Nachrichtenteil URL : http://lists.mushaake.org/pipermail/mysql-de/attachments/20060528/7dcc1736/attachment.bin From daur at so-nso.de Tue May 30 23:26:34 2006 From: daur at so-nso.de (Tobias Daur) Date: Tue, 30 May 2006 23:26:34 +0200 Subject: update mit ermittelten werten in einer query In-Reply-To: <1148816398.3729.108.camel@laptd> References: <1148816398.3729.108.camel@laptd> Message-ID: <1149024394.1503.21.camel@laptd> Na, dann antworte ich mir mal selber - für Euch, fürs Archiv und die Nachwelt: Das Problem besteht darin, ein Update mit Werten zu machen, die durch einen Select erst ermittelt werden müssen. Bis MySQL 4.0 geht das nur über mehrere Queries und mit Hilfe temporärer Tabellen. Ab MySQL 4.1 gibt es Subselects, und genau ein solcher hilft hier: UPDATE artikel LEFT JOIN (SELECT DISTINCT ... as empfohlen, idartikel ...) as t on t.idartikel = artikel.idartikel SET artikel.empfohlen = t.empfohlen Für die UPDATE-Query gibt es also eine Tabelle t auf die gejoint wird und deren Wert übernommen wird. In der Subquery wird über den SELECT diese Tabelle als Ergebnis einer Abfrage aufgebaut. Tut und macht glücklich. Tobias -------------- nächster Teil -------------- Ein Dateianhang mit Binärdaten wurde abgetrennt... Dateiname : nicht verfügbar Dateityp : application/pgp-signature Dateigröße : 189 bytes Beschreibung: Dies ist ein digital signierter Nachrichtenteil URL : http://lists.mushaake.org/pipermail/mysql-de/attachments/20060530/0a4f67ab/attachment-0001.bin From lists at sebastianmendel.de Wed May 31 08:36:57 2006 From: lists at sebastianmendel.de (Sebastian Mendel) Date: Wed, 31 May 2006 08:36:57 +0200 Subject: update mit ermittelten werten in einer query In-Reply-To: <1149024394.1503.21.camel@laptd> References: <1148816398.3729.108.camel@laptd> <1149024394.1503.21.camel@laptd> Message-ID: <447D3989.4080907@sebastianmendel.de> Tobias Daur schrieb: > Na, dann antworte ich mir mal selber - für Euch, fürs Archiv und die > Nachwelt: > > Das Problem besteht darin, ein Update mit Werten zu machen, die durch > einen Select erst ermittelt werden müssen. > > Bis MySQL 4.0 geht das nur über mehrere Queries und mit Hilfe temporärer > Tabellen. > > Ab MySQL 4.1 gibt es Subselects, und genau ein solcher hilft hier: du hattest leider nicht geschrieben welche MySQL Version du einsetzt ... und traurige Wahrheit ist nunmal das immer noch viele auf 4.0 oder 3 arbeiten 'müssen' ... und so ins blaue hinein antworten wollen die meisten wohl nicht ... also auch fürs Archiv: Bitte immer die verwendete MySQL-Version mit angeben! > UPDATE artikel LEFT JOIN (SELECT DISTINCT ... as empfohlen, > idartikel ...) as t on t.idartikel = artikel.idartikel > SET artikel.empfohlen = t.empfohlen > > Für die UPDATE-Query gibt es also eine Tabelle t auf die gejoint wird > und deren Wert übernommen wird. In der Subquery wird über den SELECT > diese Tabelle als Ergebnis einer Abfrage aufgebaut. -- Sebastian -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql