1
她是我的表:如何根據N來製作近似數字並接近現實?
// users
+----+--------+------------+----------------+------------+
| id | name | reputation | avatar | visibility |
+----+--------+------------+----------------+------------+
| 1 | John | 344 | er0942334r4... | 1 |
| 2 | Peter | 65544 | 340ojfc343f... | 0 |
+----+--------+------------+----------------+------------+
// posts
+----+--------+------------+-----------+
| id | title | content | author_id |
+----+--------+------------+-----------+
| 1 | title1 | content1 | 2 |
| 2 | title2 | content2 | 1 |
+----+--------+------------+-----------+
這裏是我的查詢:
SELECT p.*,
COALESCE(u.name,'NoName') as `name`,
u.reputation as `rep`,
COALESCE(u.avatar,'default') as avatar
FROM posts p
LEFT JOIN users u
ON u.id = p.author_id AND u.visibility = 1
這裏是當前輸出:
+----+--------+------------+-----------+--------+------+----------------+
| id | title | content | author_id | name | rep | avatar |
+----+--------+------------+-----------+--------+------+----------------+
| 1 | title1 | content1 | 2 | NoName | | default |
| 2 | title2 | content2 | 1 | John | 344 | er0942334r4... |
+----+--------+------------+-----------+--------+------+----------------+
正如你看到的,rep
列將在user.visibility = 1
之內爲空。現在我想從users.reputation
的實際值創建一個近似數字並接近實際,並將其設置在那裏。
因此,這裏是預期結果:
+----+--------+------------+-----------+--------+------+----------------+
| id | title | content | author_id | name | rep | avatar |
+----+--------+------------+-----------+--------+------+----------------+
| 1 | title1 | content1 | 2 | NoName | +5k | default |
| 2 | title2 | content2 | 1 | John | 344 | er0942334r4... |
+----+--------+------------+-----------+--------+------+----------------+
這裏是所有可能的情況下爲rep
:
1
+100
+1k
+5k
+20k
+100k
我怎麼能這樣做?
很好......謝謝,upvote。 –
你的解決方案完美無缺......但對我來說有一個模糊的東西:我的查詢速度要快得多,爲什麼?我創建了一個基準和1000次執行,**我的:2.4秒**,**你的:4.7秒**。爲什麼? –
@MartinAJ。 。 。這個版本需要處理'用戶'中的所有行。如果大多數可見性標誌設置爲「0」,那麼這將過濾掉大量數據。我有點驚訝,表現的差異會是(相對)大,但它可能會有所作爲。 –