ホームページ >バックエンド開発 >PHPチュートリアル >mysqlを修正するにはどうすればよいですか?

mysqlを修正するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-20 12:48:56885ブラウズ

SELECT (SELECT REPLACE('500x1x10','x','*') AS a)/5000; 这个结果得到0.1,但是实际应该是1,怎么去改正?


ディスカッションへの返信 (解決策)

文字列形式の式は評価されません
mysql には類似したものはありませんeval 関数。独自の

を作成できます。たとえば、
SELECT substring_index(a,'*',1) * substring_index(substring_index(a,'*',2) , '*',-1) * substring_index(substring_index(a,'*',3),'*',-1)
from (select REPLACE('500x1x10','x','*') AS a ) t
ですが、普遍的な意味はありません

mysql フィールドに 500x1x10 の文字列が格納されているが、計算する場合、計算を実行する前に x を * に置き換える必要があります。

クエリができるようになると、php で計算するのがずっと簡単になります。

SELECT process.fid,SUM(CASE WHEN (product.box_product_dimensions/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS sumweight, (CASE WHEN (product.box_product_dimensions/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS weight FROM `process`  LEFT JOIN product ON product.pid=process.pid WHERE 1 AND process.receiver_id>0 AND statu="3" AND property="转仓单" AND isover="N" GROUP BY fid

これは私の SQL セクションの 1 つです。見てください。計算がプログラム内で行われるとしたら、あまり便利ではありません。

product.box_product_dimensions には、14x12x36 の形式で文字列が格納されます。計算する必要がある場合は、14*12*36

#4 のコードは問題とは完全に異なります。あなたが投稿したものは同じではありません

#4 のコードは投稿した問題と同じではありません



SELECT process.sku,process.fid,SUM ( CASE WHEN (REPLACE(product.box_product_dimensions,'x','*')/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS sumweight,
(CASE WHEN (REPLACE(product.box_product_dimensions, ' x','*')/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS 重量 FROM `process`
LEFT JOIN product ON product.pid=process.pid WHERE 1 AND process.receiver_id> ; 0 AND status="3" AND property="倉庫注文の転送" AND isover="N" GROUP BY fid

product.box_product_dimensions は、14x12x36 私 #1 は、自分で関数を書かない限り、行文字列

内の式を参照することは不可能であると明確に言いました。自分で関数を作成すると、行文字列

SELECT process.sku,process.comment2,SUM(CASE WHEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000)>box_shipping_weight THEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000)ELSE box_shipping_weight END ) AS sumweight, (CASE WHEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000)>box_shipping_weight THEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000) ELSE box_shipping_weight END ) AS weight FROM `process`  LEFT JOIN product ON product.pid=process.pid WHERE 1 AND process.receiver_id>0 AND statu="3" AND property="转仓单" AND isover="N"   GROUP BY comment2
( SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1)) 内の式を参照することはできません。 ? ?

なぜ選択するのか? ?

( SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))? ? ?

なぜ選択するのか? ?

必要ないようですが、この場合はできるはずです。
こんにちは、私たちは情熱的で精力的な起業家チームです。私たちの目的は、大学生にコードの書き方を教え、資格のあるプログラマーになることです。現在は安定したウェブサイトをサポートしており、将来的には新しい分野を開拓し、独立を目指したいと考えています。現在、参加してくれるメンターはいますが、まだ十分ではありません。あなたのようなスキルを持った優秀な人材が私たちに参加してくれることを願っています。あなたの断片的な時間を使っていただければ幸いです。もっと勉強しますか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。