2015-05-21 26 views
0

我有slu format格式化爲my-cool-slug但是我需要自動增加一些使類似的slu unique獨特如my-cool-slug-2 -3,-4等我正在關注這篇文章https://stackoverflow.com/a/15972027/635027做到這一點,但我碰到一個問題。獨特的彈頭問題自動增量

當插入到MySQL中時,slug停在-1計數處,並在找到重複項時繼續輸入over而不是增加到下一個整數。以下是我的查詢和相關的行。我究竟做錯了什麼?

$slug = 'my-cool-slug'; 

$slug_query = "SELECT * FROM pv_events WHERE event_slug LIKE '".$slug."%'"; 
$slug_result = mysqli_query($conn,$slug_query); 
$slugs = mysqli_fetch_array($slug_result,MYSQLI_ASSOC); 


    if(mysqli_num_rows($slug_result) !== 0 && in_array($slug, $slugs)){ 
     $max = 0; 

     //keep incrementing $max until a space is found 
     while(in_array(($slug . '-' . ++$max), $slugs)); 

     //update $slug with the appendage 
     $slug .= '-' . $max; 
    } 
+0

while語句是正確的,所以這個問題是從'mysqli_fetch_array'來,是它返回你期望的結果嗎? – Bankzilla

+0

不,正如德文在下面提到的,它只使用'mysqli_fetch_array'返回第一個結果 – RonnieT

+0

我假設你的事件表有一個'id'字段。爲什麼不把這個'id'附加在slu and上,並用不必要的詭計來完成。 –

回答

1

mysqli_fetch_array選擇下一行,而不是整個結果集,所以$蛞蝓將只包含的第一個結果。其次,如果你想從2開始,將$ max設置爲1而不是0是有意義的。你的while的第一次迭代1將被添加。

+0

所以我應該使用一段時間並將結果放入數組中? '\t while $($ row = $ slug_result-> fetch_array()){ \t \t $ slugs [] = $ row; \t}' – RonnieT

+0

嗯,我會以不同的方式開始。這可以通過多種方式完成。 – Devon

0
  1. 只需選擇 「event_slug」,而不是 「*」

    $ slug_query = 「SELECT event_slug FROM pv_events WHERE event_slug LIKE '」 $彈頭 「%。'」

  2. 使用mysqli_fetch_all

    $蛞蝓= mysqli_fetch_all($ slug_result,MYSQLI_ASSOC);