0
所以我的問題是:什麼是檢查哪些行從1 - 14丟失,然後到INSERT
我的新值進入開放行的最佳方法。Mysql:按順序將值插入缺口
我知道這是沒有必要填寫您的數據庫中的差距,但我做在PHP的課程,我需要做到以下幾點:
我有primary key
表設置爲id
,但不是auto_increment
。因此,如果14個值中的一個被刪除,則需要將新值置於空位中。
我已經讀了一點點,發現了一些關於SO的問題,但他們都只是想檢查是否存在差距,我不知何故需要告訴它什麼和它允許更新值。
我有這個
SELECT MIN(t1.position_id)+1 AS unused
FROM playerposition AS t1
WHERE NOT EXISTS (SELECT * FROM playerposition AS t2 WHERE t2.position_id = t1.position_id+1)
UNION
-- Special case for missing the first row
SELECT 1
FROM DUAL
WHERE NOT EXISTS (SELECT * FROM playerposition WHERE position_id = 1)
) AS subquery
但是,只返回第一行,我真的不明白查詢。任何幫助,建議或指導將不勝感激。
UPDATE
我已經進行了更改查詢和我現在明白了空值。我的新的查詢看起來像這樣
SELECT a AS id, b AS next_id, (b - a) -1 AS missing_inbetween
FROM
(
SELECT a1.position_id AS a, MIN(a2.position_id) AS b
FROM playerposition AS a1
LEFT JOIN playerposition AS a2 ON a2.position_id > a1.position_id
WHERE a1.position_id <= 14
GROUP BY a1.position_id
) AS tab
WHERE
b > a + 1
我仍然需要與INSERT
一部分,儘管
如果您在php中學習課程,您可能需要在php中執行此操作(例如使用循環)。值1-14聽起來非常具體。你的任務是填補每一個缺失的值(就像你的第二個查詢看起來一樣)?或者只有一個(如你的第一個查詢和你的解釋暗示)?如果所有從1到14的值都已經存在,會發生什麼?所以我會重新檢查你的任務,也許你錯過了一些東西。一般來說:你可以簡單地通過insert into tablename(column1,...)來從select中插入值。選擇你的select-query-with-the-right-amount-of-columns-to-fit-the-columnname-list - 從插入' – Solarflare
不,我不需要填寫每個值。如果發佈新值,我需要檢查表格,看看是否存在1到14之間的差距,如果找到了,那麼我將該值插入該差距,如果不是,則只需要回顯一些內容。如果值2被刪除,我需要用相同的PK值替換2 –
那麼,在這種情況下,你的第一個查詢帶有一個額外的'select min(unused)from('在開始時應該做這個工作(你必須添加一個條件爲<= 14,但我會留給你),你可以添加'insert into playerposition(position_id)select ...',但是如果所有的值都被填充了,你就不能輕鬆地回顯。當然,如果這是你的實際任務,但這取決於你的決定。 – Solarflare