| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.266
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Hallo und willkommen im Forum! Ein Index auf myinfos.length bringt keine Beschleunigung? Kannst du statt "bli", "bla", "blubb" Integer-Konstanten verwenden? Kannst du die info_type-Bedingung statt in WHERE in die ON-Bedingung einbauen? Probier das ganze mal. Ein Index muss auf allen Spalten, die du für WHERE/ON oder ORDER BY verwendest, gesetzt werden. Dadurch verlangsamen sich allerdings die Einfüge/Bearbeitungs-Operationen gegebenenfalls.
__________________ "Nuschel ich?" - "Was?" |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Ein JOIN bezieht sich immer auf die beiden Tabellen, zwischen denen er steht - ein JOIN von myinfos mit info_type macht also überhaupt keinen Sinn, da verwundert es auch nicht, dass du falsche Werte erhältst. Many2Many muss Tabelle A über die Verknüpfungstabelle X auch mit Tabelle B verbinden (A-X-B), nicht wie bei dir X-B-A. Beachte dabei aber auch die Bedeutung von RIGHT/LEFT JOIN, INNER/OUTER JOIN etc. Das Ganze könnte/sollte/müsste dann wohl in etwa so aussehen: PHP-Code: // Edit: die dank Forensoftware nicht nutzbar ist...wer verbricht solche Einstellungen? Dann halt so: ![]()
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 Geändert von G.Schuster (25.10.2010 um 09:19 Uhr). |
| | |
| | |
| Neuer Benutzer Registriert seit: 24.10.2010
Beiträge: 5
PHP-Kenntnisse: Anfänger ![]() | Hallo nochmal und danke für die Antworten ! @Chriz: Die Infotypen auf integer zu setzen wäre zwar prinzipiell möglich (und wurde auch bisher ähnlich gehandhabt) setzt aber voraus dass ich entsprechende infos dann im php-Teil als array hardcode was ich in Zukunft gerne vermeiden wollte, um eine höhere Flexibilität zu gewährleisten (in der Tabelle sind auch noch nen paar zusätzliche Infos zu den entsprechenden Typen wir ne kurze Beschreibung usw die ich beim erstellen eines geeigneten Abfrageformulars bei Bedarf auslese) Ansonsten wäre es natürlich einfacher aus dem 3 tabellen-Problem auf ein 2 Tabellen-Problem zu reduzieren^^ Zu der Idee mit dem einbinden der Bedingungen in die ON-Klausel: soweit ich das verstanden habe sollte man dies nicht tun (steht zumindest im MySQL-Handbuch) zumal ich mir da auch gerade nicht ganz sicher bin wie ein entsprechendes Konstrukt aussehen müsste... @G.Schuster: Danke für deinen Vorschlag, dieser macht es nun zum ersten mal möglich bei einer Abfrage sinnvoll und schnell nach der Länge zu sortieren Allerdings habe ich mit dem Anpassen der Abfrage noch eine kleine Schwierigkeit: Mit der Where-Bedingung PHP-Code: PHP-Code: |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Poste bitte die CREATE-Syntax der Tabellen und Beispieldaten, damit man testen kann, idealer Weise bitte als SQL-Datei zum direkten Einspielen.
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 |
| | |
| | |
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.266
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Wenn du die Zeilen erst in der WHERE-Bedingung beschränkst ist das kartesische Produkt eben riesig groß, bei der ON-Bedingung wird es nicht größer als nötig. Das ist zumindest mein aktuelles Wissen. Ein Test hätte ja nicht geschadet.
__________________ "Nuschel ich?" - "Was?" |
| | |
| | |
| Neuer Benutzer Registriert seit: 24.10.2010
Beiträge: 5
PHP-Kenntnisse: Anfänger ![]() | @Chris: dazu hatte ich mir bisher keine Gedanken gemacht... @G.Schuster: Ich hab mal ne kleine Test-DB mit Zahlen zusammen gebastelt, das Muster entspricht dem der Original-DB, nur wurde bei der hier zur Veranschaulichung nur Zahlen und deren Teilbarkeit verwendet. Ne Beispielabfrage könnte nun z.B. so aussehen: PHP-Code: Allerdings spuckt die Abfrage z.B. auch die Zahl 1080 aus obwohl diese auch z.B. durch 15 Teilbar ist (und das auch richtig in der zw.table steht^^) |
| | |
| | |||
| Erfahrener Benutzer Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
PHP-Code: PHP-Code: Query sehe so aus: PHP-Code: PHP-Code: Zitat:
Schau dir den Query von Morik mal genau an, das ist nicht X-B-A sondern unterm Strich auch A-X-B. Woher kommt dieser Scheiß mit dem Kreuzprodukt? Das ist absoluter quatsch... kein gängies RDBMS macht sowas. Die bilden alle ihr Ergebnis Zeilenweise. | ||
| | |
| | ||
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.266
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Woher hast du deine Informationen?
__________________ "Nuschel ich?" - "Was?" | |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
EXPLAIN SELECT * FROM b AS b1, b AS b2 WHERE b1.id = b2.id EXPLAIN SELECT * FROM b AS b1 INNER JOIN AS b2 ON (b1.id = b2.id) EXPLAIN SELECT * FROM b AS b1, b AS b2 HAVING b1.id = b2.id Bei einem wird das Kreuzprodukt gebildet und danach gefilter... nur welchem Warum man Queries vom Minuten auf Milisekunden trimmen kann ist auch recht einfach erklärt. Dumme Queries! Weit hergeholtes Beispiel... wir haben zwei Tabellen: Telefonnummern und Personen. Aufgabe such mir alle Telefonnummern deren Inhaber mit B anfängt, aber du musst von der Tabelle mit den Telefonnummern anfangen zu suchen und nicht von der Tabelle mit Personen die alphabetisch sortiert ist. Solche dummen Aufgaben senden manche an die Datenbank. In SQL ausgedrück: PHP-Code: PHP-Code: Ansonsten sind fehlende Indizies auch ein massives Problem. Letzter Query als Beispiel, diesmal ist auf telnr.person_id kein Index. Das heißt die Datenbank fängt für _jede_ gefundene Person an, die Tabelle telnr zu scannen bis sie die person_id gefunden hat. Vorher war die kompläxität durch den Index logaritmisch zur Anzahl Datensätzen, jetzt linear. Und da sind wir ganz schnell bei 200ms vs. 5min. 20.000 Personen * 100 Operation um die Nummer zu finden vs. 20.000 Personen * 10.000.000 Operation um die Nummer zu finden. | |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Tabellen Verknüpfen.. | Hendrik | PHP Tipps 2010 | 1 | 18.05.2010 00:40 |
| mysql select if und else 2 tabellen | sandrasandra | Datenbanken | 15 | 28.04.2010 00:37 |
| Problem mit Abfrage für Suche (zwei Tabellen verknüpfen - JOIN?) | Schlendrian | Datenbanken | 4 | 26.04.2010 12:55 |
| [Erledigt] Geschwindigkeitsprobleme mit großer normalisierter Datenmenge (Apache Logs | franzcois | Datenbanken | 9 | 01.04.2010 13:33 |
| [Erledigt] join(?) über 3 Tabellen | kn0wledge | PHP Tipps 2010 | 13 | 18.03.2010 16:21 |
| Tabellen miteinander verknüpfen | Suzi | Datenbanken | 12 | 27.05.2009 11:40 |
| brauche Hilfe bei mysql JOIN | serious-cool | Datenbanken | 2 | 22.03.2009 20:29 |
| [Erledigt] Join über 3 Tabellen | BlackPanther | Datenbanken | 2 | 11.03.2009 19:56 |
| PHP Array in MYSQL Tabellen schreiben | Matt | Datenbanken | 1 | 26.02.2008 19:43 |
| Problem mit Inner join | Jabi | Datenbanken | 15 | 09.05.2006 14:10 |
| tabellen verknüpfen | philips | Datenbanken | 26 | 06.05.2006 11:15 |
| LEFT OUTER JOIN für mehr als 2 Tabellen ? | Alpha Centauri | Datenbanken | 4 | 05.04.2006 16:18 |
| 3 tabellen verknüpfen | tomson | Datenbanken | 2 | 21.01.2006 12:53 |
| 3 Tabellen mit JOIN verknüpfen? | becks123 | Datenbanken | 6 | 13.08.2005 00:05 |
| INNER JOIN mit 4 tabellen ??? | Dragon26mFR | Datenbanken | 5 | 01.05.2005 18:51 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| http://www.php.de/datenbanken/73198-3-mysql-tabellen-per-join-verknuepfen.html, mysql join, mysql tabellen verknüpfen, mysql join drei tabellen, mysql tabellen verknüpfen join, mysql join 3 tables, verknüpfungstabelle mysql, mysql suche über drei tabellen, mysql inner join über 3 tabellen, mysql join as, mysql inner join 3 tabellen, sql verknüpfungstabelle join, mysql drei tabellen zusammen, mysql join mehrere tabellen, mysql tabellen suche verknüpfen, mysql join 3 tabellen, mysql join or verknüpfung, mysql tabelle verknüpfung, mysql verknüpfung von tabellen mit bedingung, mysql joins verknüpfen |