PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   SQL / Datenbanken (https://www.php-resource.de/forum/sql-datenbanken/)
-   -   order by mit 100% ergebnissen zu erst (https://www.php-resource.de/forum/sql-datenbanken/98092-order-by-mit-100-ergebnissen-zu-erst.html)

xJonx 19-11-2009 18:55

order by mit 100% ergebnissen zu erst
 
Hi Forum,

ich hab hier gerade ein interessantes Problem, bei dem Ich leider auch nicht weiter komme.

Ich habe in einer Modeldatenbank als Beispiel den Brustumfang hinterlegt.
Nun will ich bei der Suche nach einer Größe (hier 90), eine Toleranz von 14 bzw 7 in jede Richtung einsetzen ...

Such begriff 90 sähe das zB so aus:
PHP-Code:

SELECT FROM `modelsWHERE (`chest` > "83" AND `chest` < "97") AND `draft` = 0 ORDER BY `chestDESC LIMIT 0,

Das Problem was ich jetzt habe, das ich in der Sortierung eigentlich die 100% Treffer als erstes Ausgeben müsste. Weil wenn ich nen Typen mit 90 Brustumfang suche, will Ich ja nicht zu erst nen 97er haben.

Die große Frage wäre daher nun: wie kann ich das am sinnvollsten in einem String ermöglichen?

Ich würde gerne den nachfolge Prozess von dieser Änderungen unbeeinträchtigt lassen und somit alles in der SQL Abfrage abarbeiten.

Grüße,
Jon

Kropff 19-11-2009 18:57

Änder erst mal das hier.
PHP-Code:

`chest` > 83 AND `chest` < 97 

Peter

xJonx 19-11-2009 19:02

Zitat:

Zitat von Kropff (Beitrag 629465)
Änder erst mal das hier.
PHP-Code:

`chest` > 83 AND `chest` < 97 

Peter

du meinst die anführungsstriche wegen INT() suche?

wahsaga 19-11-2009 19:13

Bilde einfach noch den Betrag der Differenz zwischen gesuchtem und gefundenem Wert, und sortiere danach.

xJonx 19-11-2009 19:25

ok. das klingt logisch. mag mir jmd kurz erklären wie das genau geht?
also aufbau oder "befehl" ?

wahsaga 19-11-2009 19:37

Betragsfunktion siehe MySQL-Handbuch, Rest steht eigentlich schon da.

ecswebhosting 19-11-2009 22:58

Sql
 
Hi Jon!
Und wennst einfach 2 SELECT Befehle machst und mit UNION dann zusammenschmeißt? 1* SELECT mit genauem Suchergebnis (brauchst nicht zu sortieren) und 1* SELECT mit Umfang < > sortiert.

Ich halte die Differenz nicht unbedingt für die Lösung, da ja auch ein kleineres Ergebnis durch die Sortierung oben stehen könnte. Wenn ich 90 Umfang habe, dann soll 90 oben stehen und nicht 87 oder 97.

Also einmal select ... where = 90 UNION select ... < > order by ...;

Viele Grüße,
Ingo

wahsaga 19-11-2009 23:29

Zitat:

Zitat von ecswebhosting (Beitrag 629501)
Ich halte die Differenz nicht unbedingt für die Lösung, da ja auch ein kleineres Ergebnis durch die Sortierung oben stehen könnte.

Wie meinen?
Zitat:

Wenn ich 90 Umfang habe, dann soll 90 oben stehen und nicht 87 oder 97.
Eben.

Bei dem Datensatz, der den Wert 90 enthält, ist die Differenz zum gesuchten Wert 0 - und deshalb wird der weiter nach oben sortiert als der mit dem Wert 87, wo die Differenz 3 beträgt, und der damit immer noch vor dem mit 97 kommt, bei dem die Differenz 7 ist ...

ecswebhosting 20-11-2009 00:18

Hallo!

Stimmt, die Differenz 0 wäre ganz oben, das habe ich jetzt wiederum nicht bedacht.

Aber wäre es denn nicht sinnvoll, wenn anschließend die Größen durchgehend aufsteigend kämen? Bei Differenz wäre das doch nicht sichergestellt, da 91 und 89 dieselbe Differenz zu 90 hätten? Ich würde aus diesem Grund das nach wie vor mit UNION und 2 Abfragen machen - die 1. mit = 90 und die 2. Abfrage wie bereits beim ursprünglichen SQL-Statement sortieren lassen. So wäre 90 oben und danach käme 83...97.

Viele Grüße,
Ingo
ECS-Webhosting

wahsaga 20-11-2009 00:51

Zitat:

Zitat von ecswebhosting (Beitrag 629508)
Aber wäre es denn nicht sinnvoll, wenn anschließend die Größen durchgehend aufsteigend kämen?

Das käme dann auf die genaue Aufgabenstellung an ...

TobiaZ 20-11-2009 01:15

Wahsaga hat schon Recht. 91 weicht genauso weit vom Wunsch ab wie 89. In sofern drückt die Differenz genau das aus, was gewünscht ist.

Und selbst wenn größere Umfänge bevorzugt werden sollen, dann würde ich eher ein zweites Argument (umfang > 90,0,1) mit einbringen, denn das (91,89,86,97) ist immernoch sinniger als die reine sortierung nach der größe (97,91,89, 86) wie in dem union-statement.

Nur um mal ein bisschen über den Tellerrand zu schauen und weil hier grad nichts los ist. :D

xJonx 20-11-2009 14:44

da kämme es auch zu meiner hintergrundidee, zu der ich nicht direkt das gefunden habe, was das problem lösen würde.

gesprochen würde ich sowas suchen:

SELECT ... WHERE max differenz zu 90 = 7

wobei das dann im ergebnis die, die am nächsten dran sind, halt oben stehen sollten.

wahsaga 20-11-2009 14:51

Zitat:

Zitat von xJonx (Beitrag 629536)
gesprochen würde ich sowas suchen:

SELECT ... WHERE max differenz zu 90 = 7

Wenn du alle Datensätze haben willst, wo die Differenz maximal 7 beträgt - dann setze es als simple kleiner-gleich-Bedingung um.

Zitat:

wobei das dann im ergebnis die, die am nächsten dran sind, halt oben stehen sollten.
Wie das geht, das haben wir inzwischen so breit erklärt, dass es ein Grundschüler hinbekommen dürfte.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:56 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG