| | | | |
| |||||||
| Datenbanken SQL und Co |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |||||||
| Erfahrener Benutzer Registriert seit: 02.08.2005
Beiträge: 252
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
Zitat:
Zitat:
Kunden | n:m | Kategorien Also habe ich 3 Tabellen Kunden Kunden zu Kategroein Kategorien Wo bin ich "sinnlich" daneben? Vertsehe noch nich worauf du da raus willst. Zitat:
Zitat:
Zitat:
Im Endeffekt sollte mir bei meiner Anfrage jeder Kunde gegeben werden, der in einer der angegebenen Kategorien ist. Die Kategroie muss halt mit Volltextsuche stattfinden. Z.B. katname LIKE '%sn / gs%' OR katname LIKE '%tkf /%', etc
__________________ SELECT * benutze ich nur um den Post kurz zu halten. | ||||||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 02.04.2008
Beiträge: 4.034
![]() | Ok, mag sein, dass diese Art von Joins funktioniert. Ich habs so nocht nicht gesehen, und es ist sicher nicht Standard-SQL. Deshalb würde ich davon abraten. Aber dein Problem ist ein anderes: Du hast eine 1:n Beziehung zwischen Kunden und Kategorien, d.h. ein Kunde kann in mehreren Kategorien sein. Wenn du nun einen solchen Kunden nur einmal haben willst, woher soll nun die DB wissen, welche Kategorie sie ausgeben soll? Also gibst du entweder die Kategorie nicht aus, dann funktioniert das mit DISTINCT, oder du gibst den Kunden halt mehrfach mit der jeweiligen Kategorie aus, wie du es schon hast.
__________________ Gruss L |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 02.08.2005
Beiträge: 252
PHP-Kenntnisse: Fortgeschritten ![]() | Ich glaub ich hab das Problem verstanden und nach mehreren Stunden durchdenken des Problems mein Problem erkannt. Es ist klar, das die Einträge doppelt kommen, weil ja 2 Treffer in der Kategorie sind. Meine Anzeige soll egal welche Kategorie anzeigen. Ich brauche Kunden und irgendeine Kategorie in der er ist. Und dafür benötige ich den GROUP BY. Dann kann ich nach Kunden-ID Gruppieren und habe in Kategorie eine Kategorie stehen und alle Einträge nur einmal. So wie ich es mir wünsche (ich es brauche). Zitat:
Danke für deine Hilfe.
__________________ SELECT * benutze ich nur um den Post kurz zu halten. | |
| | |
| | |||
| Erfahrener Benutzer Registriert seit: 02.04.2008
Beiträge: 4.034
![]() | Zitat:
Zitat:
__________________ Gruss L | ||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 02.08.2005
Beiträge: 252
PHP-Kenntnisse: Fortgeschritten ![]() | Nunja, für meine Anzeige ist es egal welche Kategorie er anzeigt. Der Auftrag ist: Gib mir alle Kunden die in (Kat1 oder Kat2 oder Kat3) UND (Kat4 oder Kat5 oder Kat6) Und eine Kombination muss angezigt werden. z.B. Kunde 1 in Kat2 UND kat5. Das der Kunde auch noch in kat6 ist interessiert keinen. Daher benötige ich GROUPY BY. Auch wenn dadurch die Abfrage deutlich langsamer ist. Da es ein EXPORT nach CSV ist, ist aber die Zeit relativ. Ich hab mich mal ins SQL gelesen und festgestellt das es das dort wirklich nicht gibt. In anderen MySQL-Documentationen habe ich auch das Symbol "MySQL only!" gefunden. Also werde ich mit INNER JOIN die Tabellen verknüpfen (ist einfacher, das ich den Query aus verschiedenen PHP-Funktionen zusammen baue). Danke nochmal.
__________________ SELECT * benutze ich nur um den Post kurz zu halten. |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 02.08.2005
Beiträge: 252
PHP-Kenntnisse: Fortgeschritten ![]() | Nunja, im ersten Post war das mein "Grob-Entwurf" für den Weg. Die Anzahl für die Kat-Verknüpfung ist dynamisch aus PHP5. Das kann auf (kat1 oder Kat2) UND (kat3 oder kat4 oder kat5) UND (kat6), etc... Im ersten Post war ein Beispiel wo ich das Problem gefunden hatte. Ich wollte den Query nicht zu voll machen und die Übersichtlichkeit waren, damit sich den Query ja noch jemand durchlesen kann. Ein andere dynamischer Query jetzt ist z.B. Code: SELECT ca40Felder
FROM kundenstamm_kunden k
INNER JOIN kundenstamm_kat_to_kunde i1
ON i1.zukunde=k.ident
INNER JOIN kundenstamm_kategorien j1
ON j1.ident=i1.zukat
INNER JOIN kundenstamm_kat_to_kunde i2
ON i2.zukunde=k.ident
INNER JOIN kundenstamm_kategorien j2
ON j2.ident=i2.zukat
INNER JOIN kundenstamm_kat_to_kunde i3
ON i3.zukunde=k.ident
INNER JOIN kundenstamm_kategorien j3
ON j3.ident=i3.zukat
WHERE (
(
(LOWER(k.nachname) LIKE '%huber%')
OR (LOWER(k.internet) LIKE '%huber%')
)
)
AND (k.ort='Regensburg')
AND (k.land='Deutschland')
AND (k.plz BETWEEN '93047' AND '93050')
AND (
((j1.fulllang='tf / perc') OR (j1.fullshort='tf / perc'))
OR ((j1.fulllang='tf / gt') OR (j1.fullshort='tf / gt'))
)
AND (
((LOWER(j2.fulllang) LIKE '%gesang%') OR (LOWER(j2.fullshort) LIKE LOWER('%gesang%')))
OR ((LOWER(j2.fulllang) LIKE '%tenor%') OR (LOWER(j2.fullshort) LIKE LOWER('%tenor%')))
OR ((LOWER(j2.fulllang) LIKE '%alt%') OR (LOWER(j2.fullshort) LIKE LOWER('%alt%')))
OR ((LOWER(j2.fulllang) LIKE '%sopran%') OR (LOWER(j2.fullshort) LIKE LOWER('%sopran%')))
)
AND (
((LOWER(j3.fulllang) LIKE '%jersey / gesang%') OR (LOWER(j3.fullshort) LIKE LOWER('%jersey / gesang%')))
)
GROUP BY k.ident
LIMIT 0,30;
__________________ SELECT * benutze ich nur um den Post kurz zu halten. |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 02.04.2008
Beiträge: 4.034
![]() | Wenn das für dich funktioniert, ist es ja ok. Du hast allerdings Glück, dass du mit MySQL arbeitest, jedes andere RDBMS würde diese Abfrage nicht akzeptieren, weil alle Attribute, die in einer Abfrage mit GROUP BY vorkommen auch in der GROUP BY-Klausel stehen müssen. Nach meiner Meinung ist es ein Fehler von MySQL, dass das möglich ist. Alle Werte, die in deinem Beispiel nicht direkt von k.ident abhänging sind, sind ja Zufallsresultate. Da dir aber diese Kategorien ja egal sind, hast du Glück gehabt. Ausserdem liege ich wahrscheinlich auch richtig, mit der Vermutung, dass deine DB nicht normalisiert ist, wenn ich Dinge wie j1.fulllang = 'tf / perc' sehe. Aber was solls, wenn dein Problem gelöst ist.
__________________ Gruss L |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Mehrfach Join | lazydog | Datenbanken | 2 | 08.05.2008 16:09 |
| Frage zu meinem JOIN Statement | Benjamin Such | Datenbanken | 4 | 12.04.2008 13:20 |
| JOIN Problem | pPanther | Datenbanken | 7 | 06.03.2008 17:26 |
| performance problem mit join | leo | Datenbanken | 4 | 14.01.2008 22:31 |
| JOIN / LEFT JOIN und Co | prinzli | Datenbanken | 12 | 05.11.2007 22:15 |
| [solved] LEFT JOIN - #1066 - Not unique table/alias | moose | Datenbanken | 6 | 12.12.2006 06:41 |
| SQL-Abfrage evt. mit JOIN | mariohaehni | Datenbanken | 4 | 07.09.2006 14:26 |
| Join auf 2 verschiedene Felder | Tommek | Datenbanken | 6 | 25.07.2006 20:39 |
| Problem mit Inner join | Jabi | Datenbanken | 15 | 09.05.2006 14:10 |
| INNER JOIN + Suchkriterien + Abfrage | duerov | PHP Tipps 2006 | 4 | 04.04.2006 12:47 |
| inner join zeigt gleiche spalten nur 1x | Datenbanken | 3 | 22.02.2006 17:11 | |
| inner join aus db | PHP Tipps 2006 | 8 | 22.01.2006 01:23 | |
| Select Problem | Datenbanken | 17 | 16.01.2006 21:54 | |
| [Erledigt] Abfrageproblem mit Inner Join | Datenbanken | 15 | 29.11.2005 18:17 | |
| [Erledigt] Join | Datenbanken | 15 | 09.03.2005 08:44 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| doppelter left join, left join doppelt, left join doppelte datensätze, doppelt left join, doppeltes left join, left join, mysql join doppelte einträge, mysql left join doppelte einträge, mysql join doppelte, left join doppelte ergebnisse, http://www.php.de/datenbanken/45440-geloest-left-join-dinstinct-und-trotzdem-doppelte.html, mysql join doppelt, left join doppelte zeilen, left join nur bestimmte felder, left join doppelte, mysql join einträge mehrfach, left join nur erster datensatz, left join nur ein datensatz, inner join mysql distinct, mysql 2 mal left join |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.