SQL: Was ist falsch mit der folgenden Abfrage (generiert von WordPress WP_Query, Bestellung von Preisen)

Hallo, ich habe die folgende SQL-Abfrage, die von WP_Query numerische Meta-Abfrage generiert wird:

SELECT SQL_CALC_FOUND_ROWS wp_postmeta.meta_value FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND ( wp_postmeta.meta_key = 'price' AND ( mt1.meta_key = 'price' AND CAST(mt1.meta_value AS SIGNED) BETWEEN '0' AND '9999' ) ) AND wp_posts.post_type = 'product' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY CAST(wp_postmeta.meta_value AS SIGNED) DESC LIMIT 0, 15 

Die WordPress-Abfrage – wenn es hilft – wird so generiert und sollte korrekt sein:

 array(6) { ["orderby"]=> array(1) { ["price"]=> string(4) "DESC" } ["meta_query"]=> array(3) { ["relation"]=> string(3) "AND" ["sortprimary_clause"]=> array(3) { ["key"]=> string(17) "price" ["compare"]=> string(6) "EXISTS" ["type"]=> string(7) "numeric" } [0]=> array(4) { ["key"]=> string(17) "price" ["value"]=> array(2) { [0]=> float(0) [1]=> float(9999) } ["compare"]=> string(7) "BETWEEN" ["type"]=> string(7) "numeric" } } ["tax_query"]=> array(1) { ["relation"]=> string(3) "AND" } ["post_type"]=> string(7) "product" ["posts_per_page"]=> int(15) ["paged"]=> string(1) "1" } 

Das Ergebnis ist wie folgt:

Abfrageergebnis

Wie Sie sehen können, ordert SQL die Werte BASICALLY korrekt aber nur in der INTEGER Größe der Preise. Der Dezimaltrenner scheint vollständig ignoriert zu werden. Wie kann ich das SQL ändern, um mit Fließkommazahlen korrekt zu arbeiten? Ist es ein WordPress-Problem oder kann ich WP_Query so ändern, dass es korrekt mit Fließkommazahlen arbeitet?

EDIT: Ich habe das Problem gefunden! ORDER BY CAST(wp_postmeta.meta_value AS SIGNED) sollte ORDER BY CAST(wp_postmeta.meta_value AS DECIMAL(M,3)) .

Die Frage ist also: Wie kann ich WP_Query so ändern, dass anstelle von Integer ein Dezimalwert für den Vergleich verwendet wird?

Solutions Collecting From Web of "SQL: Was ist falsch mit der folgenden Abfrage (generiert von WordPress WP_Query, Bestellung von Preisen)"

Getriggers. Nach der Bearbeitung war es einfach. Es ist erlaubt, type => ‘decimal (x, x)’ in meta_query zu verwenden. Maximale Genauigkeit ist Dezimal (65,30).

https://dev.mysql.com/doc/refman/5.7/de/precision-math-decimal-characteristics.html

 array(6) { ["orderby"]=> array(2) { ["uss_product_price"]=> string(4) "DESC" ["title"]=> string(3) "ASC" } ["meta_query"]=> array(3) { ["relation"]=> string(3) "AND" ["sortprimary_clause"]=> array(3) { ["key"]=> string(17) "price" ["compare"]=> string(6) "EXISTS" ["type"]=> string(13) "decimal(30,5)" } [0]=> array(4) { ["key"]=> string(17) "price" ["value"]=> array(2) { [0]=> float(0) [1]=> float(9999) } ["compare"]=> string(7) "BETWEEN" ["type"]=> string(7) "decimal(30,5)" } } ["tax_query"]=> array(1) { ["relation"]=> string(3) "AND" } ["post_type"]=> string(7) "product" ["posts_per_page"]=> int(15) ["paged"]=> string(1) "2" }