Antwort
 
Themen-Optionen
Alt 12.11.2006, 12:06 Nach oben    #1
Neuer Benutzer
 
Benutzerbild von NerKnal
 
Registriert seit: 12.11.2006
Beiträge: 18
Standard UNION mit GROUP BY und score

Hallo,

ich verkünstel mich gerade an einer "Suchfunktion"

im moment sieht's so aus:
PHP-Code:
SELECT 
    bestell_nr
,
    
verlag,
    
autor,
    
titel,
    
MATCH (titelAGAINST ('alb*' IN BOOLEAN MODE) AS score
FROM 
    verlager
,
    
autoren,
    
bicher
WHERE
    v_id 
verlag_id
    
AND a_id autor_id
    
AND MATCH (titelAGAINST ('alb*' IN BOOLEAN MODE)
UNION SELECT
    bestell_nr
,
    
verlag,
    
autor,
    
titel,
    
MATCH (kurzinfoAGAINST ('alb*' IN BOOLEAN MODE) AS score
FROM
    verlager
,
    
autoren,
    
bicher
WHERE
    v_id 
verlag_id
    
AND a_id autor_id
    
AND MATCH (kurzinfoAGAINST ('alb*' IN BOOLEAN MODE)
UNION SELECT
    bestell_nr
,
    
verlag,
    
autor,
    
titel,
    
MATCH (autorAGAINST ('alb*' IN BOOLEAN MODE) AS score
FROM
    verlager
autorenbicher
WHERE
    v_id 
verlag_id
    
AND a_id autor_id
    
AND MATCH (autorAGAINST ('alb*' IN BOOLEAN MODE)
UNION SELECT
    bestell_nr
,
    
verlag,
    
autor,
    
titel,
    
MATCH (verlagAGAINST ('alb*' IN BOOLEAN MODE) AS score
FROM
    verlager
,
    
autoren,
    
bicher
WHERE
    v_id 
verlag_id
    
AND a_id autor_id
    
AND MATCH (verlagAGAINST ('alb*' IN BOOLEAN MODE)
ORDER BY bestell_nr
LIMIT 0
,50 
Das funzt auch recht gut, nur liefert MySQL keinen wirkliche score zurück
Anscheinend nur die anzahl der fundstellen heisst's in den Kommentaren zur Doku...
deshalb wollte ich eine Gewichtung anhand der Spalte, resp Tabelle in der es gefunden wurde einbauen. Das hab ich mir so in etwa vorgestellt:
PHP-Code:
SELECT 
    
...
    
1.5*MATCH (titelAGAINST ('alb*' IN BOOLEAN MODE) AS score
FROM 
    
...
WHERE
    
...
UNION SELECT
    
...
    
0.8*MATCH (kurzinfoAGAINST ('alb*' IN BOOLEAN MODE) AS score
    
...
    
1.2*MATCH (autorAGAINST ('alb*' IN BOOLEAN MODE) AS score
    
...
    
0.9*MATCH (verlagAGAINST ('alb*' IN BOOLEAN MODE) AS score
    
... 
Problem dabei:
Ich erhalte Duplikate
hab ein anschliessendes GROUP BY bestell_nr versucht, bringt nücht

In der Doku find ich nix zu UNION mit GROUP BY.
Da steht nur dass man bei UNION mit ORDER BY darauf achten soll ob man die einzelenen SELECT's ordnen will, oder das gesamte UNION-Paket.
Zitat:
To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one. The following example uses both clauses:
Code:
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;
Nur krieg ich dann Fehlermeldung
Hat schon jemand was ähnliches realisiert?
Es gibt Alternativen, aber ich will nicht unbeging 'ne Temp-Tabelle anlegen oder sonstwas.
Bin für jede Hilfe dankbar!!

Ach ja, Server is 4.0.27 Subqueris gehn leider nicht...

Geändert von NerKnal (12.11.2006 um 12:24 Uhr).
NerKnal ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2006, 09:08 Nach oben    #2
Neuer Benutzer
 
Benutzerbild von NerKnal
 
Registriert seit: 12.11.2006
Beiträge: 18
Standard

Hallo nochmals,

Erbarmt sich denn keiner?
Wenigstens ein kleines "dein DB-Design ist Sch***", oder "lies das Manual" als Antwort?

Oder ist meine Fragestellung so verkorkst?

Im Ernst, ich brüte da jetzt schon ne Weile drüber und komm nicht dahinter...
Wäre nett wenn mir einer etwas weiterhelfen könnte.
NerKnal ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2006, 09:35 Nach oben    #3
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.648
Standard

Ganz ehrlich: Ich müsste Try and Error machen und dazu bräuchte ich (und andere sicher auch) ein Datenbankdump der benutzten Tabellen, damit wir nicht selbst eins erstellen müssen

Also her damit, dann klappts auch mit dem Nach... ähm der Hilfe

//edit:
Herzlich willkommen im Forum!
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2006, 11:23 Nach oben    #4
Neuer Benutzer
 
Benutzerbild von NerKnal
 
Registriert seit: 12.11.2006
Beiträge: 18
Standard Dankeschön

Für den Willkommensgruss und die Antwort

Ich hab mal ein sql-dump angehängt mit nur den relevanten spalten, sonst wirds doch etwas gross...

Je länger ich drüber nachdenk, desto weniger glaub ich das es so klappen wird!

ich befürcht ich hab da ´nen mächtigen Knoten in der Logik, oder sogar im Hirn...
Angehängte Dateien
Dateityp: zip testili.zip (165,1 KB, 0x aufgerufen)
NerKnal ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2006, 11:34 Nach oben    #5
Neuer Benutzer
 
Benutzerbild von NerKnal
 
Registriert seit: 12.11.2006
Beiträge: 18
Standard ooohhh mannnnnn

ich bin ja doof...

löst zwar nicht das rätsel mit GROUP BY, aber mein Problem:

UNION ist ja standardmässig schon DISTINCT, wenn ich aber nun her geh und je nach spalte einen anderen score verteil sind die einzlenen zeilen ja alle unterschiedlich !!

Jede SELECT kriegt jetzt dieses als score zugewiesen:
PHP-Code:
    1.5*MATCH (titelAGAINST ('alb*' IN BOOLEAN MODE)
+
0.8*MATCH (kurzinfoAGAINST ('alb*' IN BOOLEAN MODE)
+
1.5*MATCH (autorAGAINST ('alb*' IN BOOLEAN MODE)
+
MATCH (verlagAGAINST ('alb*' IN BOOLEAN MODE)
    AS 
score 
dann klappts auch mit der Nachbarin, oder wie hat das damals in der Glotze geheissen?!?

Jetzt noch sinnvolle Gewichtungsfaktoren ausdenken und auf zur nächsten Hürde )
NerKnal ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2006, 12:26 Nach oben    #6
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.648
Standard

Ich hab aufgehört zu zählen wie oft ich schon ne Frage stellen wollte und beim erklären des Problems auf die Lösung gekommen bin.
Schön das wir dir helfen konnten
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ORDER und GROUP BY Basti Datenbanken 5 13.04.2007 11:24
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:48 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44