Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

SELECT mit Join auf 2 Tabellen

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 02.11.2010, 11:47

Hallo @all.

Ich habe 2 Tabellen die über den Wert "term" verknüpft sind.

Tabelle 1:
term, syno, hits

Tabelle 2:
term, url, hits

Ich möchte alle URL aus Tabelle 2 mit SYNO aus Tabelle 1 verknüfpen wenn die Werte TERM in Tabelle 1 und Tabelle 2 gleich sind.

Soweit ja unproblematisch. Soweit ...

Jetzt möchte ich jedoch, das im Ergebnis jede URL und jedes SYNO nur einmal vorkommt.

Code: Alles auswählen

SELECT DISTINCT url, T1.syno FROM (T2 INNER JOIN T1 ON T1.term = T2.term) WHERE T2.term LIKE 'sparen%' AND T1.syno != '' GROUP BY syno ORDER BY hitslink LIMIT 50
ergibt:

url syno
www.a.de/index.php?kw=sparen&page=1 festgeld
www.a.de/index.php?kw=sparen&page=1 haushaltsbuch
www.a.de/index.php?kw=sparen&page=1 monatlich sparen
www.a.de/index.php?kw=sparen&page=1 sparen haushalt
www.a.de/index.php?kw=sparen&page=1 sparen tipps
www.a.de/index.php?kw=sparen&page=1 sparkasse
www.a.de/index.php?kw=sparen&page=1 spartipps

Code: Alles auswählen

SELECT DISTINCT url, T1.syno FROM (T2 INNER JOIN T1 ON T1.term = T2.term) WHERE T2.term LIKE 'sparen%' AND T1.syno != '' GROUP BY url ORDER BY hitslink LIMIT 50
ergibt:

url syno
www.a.de/ festgeld
www.b.de/search.php?do_search=1&searchword=sparen festgeld
www.c.de/index.php?kw=sparen&page=1 festgeld

Gruppiere ich nach SYNO erhalte ich natürlich immer die gleiche URL, welche mit allen unterschiedlichen SYNO verknüpft ist. Gruppiere ich nach URL erhalte ich immer das gleiche SYNO, welches mit allen URL verknüpft ist.

Wie müßte die Abfrage lauten damit er jeden Wert SYNO aus Tabelle 1 und jeden Wert URL aus Tabelle 2 nur einmal verwendet?

Das DISTINCT oben bringt nicht die gewünschte Funktion. Es fragt den Wert nur einmal ab, kombiniert ihn in der virtuellen Tabelle dann aber mit den URL :-(

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


crilla
PostRank 5
PostRank 5
Beiträge: 218
Registriert: 12.02.2007, 06:52

Beitrag von crilla » 02.11.2010, 12:40

***
Zuletzt geändert von crilla am 17.11.2016, 23:45, insgesamt 1-mal geändert.

euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 02.11.2010, 13:24

@crilla

Danke. Zunächst bin ich ja mal froh, das jemand versteht was ich da geschrieben habe. Preblemstellungen klar zu formulieren ist ja nicht immer so einfach :-)

Kannst Du mir evtl. ein Codebeispiel für Deinen "Join mit Group By zwei Spalten geben"? Ich verstehe nicht so ganz wie das gemeint ist und auch die Internetrecherche hat mich dazu nicht weitergebracht.

GROUP BY geht doch nur über eine Spalte, oder?

Eine ID für die Verbindung der Tabellen geht leider nicht.

BEISPIEL:

TABELLE 1:

TERM | SYNO | HITS
haus | haus kaufen | 1
haus | vermieten haus | 1
haus | fertighaus | 2
haus | hausbau | 3

TABELLE 2:

TERM | URL | HITS
haus | www.ich.de | 1
haus | www.du.de | 1
haus | www.er.de | 2
haus | www.sie.de | 3


Jetzt soll eine URL aus T2 und ein SYNO aus T1 ausgewählt werden wenn Ihr TERM übereinstimmt.
Es soll immer das SYNO mit den wenigsten HITS und die URL mit den wenigsten HITS ausgewählt werden.
Jede URL und jedes SYNO dürfen nur einmal ausgewählt werden.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.11.2010, 14:16

Wie crilla schon sagte, "Group by" ist Dein Freund. Wobei Deine letzte Aussage noch etwas weiter geht und Du nun auch noch Bedingungen stellst. Da werfe ich nun einfach mal die Stichwörter "Order by", "Limit" bzw. "Having" in den Raum.

Wobei.... Du willst bei einer Anfrage nach "Haus" die URL mit der geringsten Anzahl und gleichzeitig dazu das Synonym mit der geringsten Anzahl.... Dürfte mit der Tabellenstruktur schwer werden, zumindest mit nur einer Query.

sx06050
PostRank 10
PostRank 10
Beiträge: 3376
Registriert: 15.07.2008, 10:24

Beitrag von sx06050 » 02.11.2010, 14:29

schaut etwas nach kreuztabelle etc. aus

euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 02.11.2010, 14:39

Code: Alles auswählen

SELECT url, hitslink, T1.syno FROM (T2 INNER JOIN T1 ON T1.term = T2.term) WHERE T2.term LIKE 'sparen%' AND T1.syno != '' GROUP BY T1.syno,T2.url ORDER BY hitslink DESC LIMIT 500
Im Ergebnis habe ich dann zuerst immer die gleiche URL oder aber immer das gleiche SYNO :-(

url hitslink syno
www.a.de/ 496 festgeld
www.a.de/ 496 haushaltsbuch
www.a.de/ 496 monatlich sparen
www.a.de/ 496 sparen haushalt
www.a.de/ 496 sparen tipps
www.a.de/ 496 sparkasse
www.a.de/ 496 spartipps
www.b.de/ 492 sparen haushalt
www.b.de/ 492 sparen tipps
www.b.de/ 492 sparkasse
www.b.de/ 492 spartipps
www.b.de/ 492 festgeld
www.b.de/ 492 haushaltsbuch
www.b.de/ 492 monatlich sparen
www.c.de/ 3 sparen haushalt
www.c.de/ 3 sparen tipps
www.c.de/ 3 sparkasse
www.c.de/ 3 spartipps
www.c.de/ 3 festgeld
www.c.de/ 3 haushaltsbuch
www.c.de/ 3 monatlich sparen
www.c.de/ 2 festgeld
www.c.de/ 2 haushaltsbuch
www.c.de/ 2 monatlich sparen
www.c.de/ 2 sparen haushalt
www.c.de/ 2 sparen tipps
www.c.de/ 2 sparkasse
www.c.de/ 2 spartipps

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag