Nur das erste Ergebnis ausgeben

  • Themenstarter Themenstarter andyK
  • Beginndatum Beginndatum
Na dann!
Du solltest aber das nächste mal, wenn du hier Beitrage schreibst dein Problem etwas genauer Schildern.
Bzw. du solltest deine Situation besser schildern - will meinen: Code-Beispiele und Scripts.
Denn alleine mit der Glaskugel kann man dabei nicht arbeiten (ist etwas zu ungenau, deswegen kriegt man die Syntax nie zu 100% hin und es dauert auch, ständig die ganzen Rituale durch zu gehen ;) ).

Dann kann dir auch besser schneller und direkter geholfen werden.
 
Ich habe jetzt schon wieder ein Problem.

Bisher funktioniert der Code mit der Breite.

Beispiel A4:

Ich kann alle Größen zwischen 210 und 250 eingeben und er gibt mir A4 aus.
Ab 250.1 ist das Ergebnis A3.

Das gleiche soll und muss aber auch mit der Höhe so funktionieren.
Darum dachte ich mir folgendes:

PHP:
		$sql = "SELECT id, name FROM din WHERE ( ($breite-breite)<=40 AND ($breite-breite)>0 ) OR
											   ( (breite - $breite) >= 37 ) OR
											   ( ($hoehe-hoehe)<=40 AND ($hoehe-hoehe)>0 ) OR
											   ( (hoehe - $hoehe) >= 73 )
											    LIMIT 1";

aber das scheint so nicht zu funktionieren.
Denn, gebe ich bei der Höhe 347, also außerhalb der Tolleranz, und bei der
Breite 210 (DIN Maß) ein, ist das Ergebnis trotzdem noch A4.
Es müsste jetzt aber A3 sein.

Wo liegt mein Denkfehler?
 
Also, ich weiss gerade nicht, wozu die ganzen Berechnungen überhaupt dienen sollen:

($hoehe-hoehe)<=40
($breite-breite)<=40
usw.

Ich meine doch mal, wenn die Breite (oder Höhe) nicht höher sein darf als die Seite, die in der Datenbank steht!
Und oben steht, dass die Seite bis zu 40 mm größer sein kann!
Was soll das?
Mit Seitenränder hat das ja wohl nichts zu tun (wäre wohl die falsche Richtung)!
Ich hätte die Query wohl eher so gestaltet:

Code:
SELECT id, name FROM din WHERE breite - $breite > -1 AND hoehe - $hoehe > -1 ORDER BY breite ASC, hoehe ASC LIMIT 1";

Es werden nur die Zeilen ausgegeben, in die die Breite und Höhe hineinpassen.
Das ganze geordnet nach Größe (abwärts sortiert - erst nach Breite, dann nach Höhe), damit die kleinstmögliche Größe als erstes steht.
Und durch LIMIT 1 wird nur das erste Ergebnis ausgegeben.

Fehlt da jetzt noch was?
Ich meine damit müsste es doch getan sein!

Außerdem benutzt du viel zu viele Klammern!
Da muss der MySQL-Optimierer doch viel zu viel nach arbeiten!
 
Das dient der Formatberechnung für ein Plott.
Da darf das Wunschformat in Breite und/oder Höhe 4 cm größer sein,
als ein DIN Format, bevor das nächst größere genommen werden muss.

Mir wäre dein Vorschlag auch viel lieber, aber was soll man machen.:(
 
Und wenn du es einfach so machst?

Code:
SELECT id, name FROM din WHERE breite - ($breite+40) > -1 AND hoehe - ($hoehe+40) > -1 ORDER BY breite ASC, hoehe ASC LIMIT 1";
 
Zurück