2016-08-12 42 views
0

我有一個頁面需要很長時間才能加載,而且我幾乎可以確定這是由於SQL請求太多而導致的)。無論如何要將這3個問題合併爲一個?使用一個很好的SQL查詢而不是PHP代碼

我想要做的這個查詢是試圖從Cardapios中選擇一個特定的ID,如果有任何東西(如果$ num_rows> 0),我想要做的唯一事情就是選擇該ID。如果什麼都沒有,那麼我想插入一些東西,然後選擇它的ID。

$query = "SELECT id FROM cardapios WHERE nome='$nome'"; 
    $sql = mysqli_query($con,$query); 
    $num_rows = mysqli_num_rows($sql); 
    if ($num_rows > 0){ 
      while ($row = mysqli_fetch_array($sql)){ 
       $_SESSION['id_cardapio'] = $row['id']; 
     $num_rows = 0; 
    }}else{ 
      $query = "INSERT INTO cardapios (nome, kcal, semana) 
      VALUES('$nome', '$kcal', '$semana')" or die(mysqli_error($con)); 
      $sql = mysqli_query($con,$query); 

      $query = "SELECT id FROM cardapios WHERE nome='$nome' "; 
      $sql = mysqli_query($con, $query); 
      while ($row = mysqli_fetch_array($sql)){ 
       $_SESSION['id_cardapio'] = $row['id']; 
      } 
     } 

我想把所有這一切放入一個查詢,但無處可去。無論如何只用一個查詢來完成這一切?

在此先感謝!

+1

一個查詢是不可能的 - 你可以把它放在一個存儲過程。 – Hogan

+0

我會研究一下,但你確定這是不可能的嗎?我試圖用SQL中的IF語句來做到這一點 - 但沒有成功。 –

+0

如果您使用的是if語句,那麼它將是多個查詢。 – Hogan

回答

0

您可以通過獲取mysqli_insert_id($con);取代過去的查詢,你已經擁有插入ID插入後

$query = "SELECT id FROM cardapios WHERE nome='$nome'"; 
$sql = mysqli_query($con,$query); 
$num_rows = mysqli_num_rows($sql); 
if ($num_rows > 0){ 
    while ($row = mysqli_fetch_array($sql)){ 
     $_SESSION['id_cardapio'] = $row['id']; 
     $num_rows = 0; 
    } 
}else{ 
    $query = "INSERT INTO cardapios (nome, kcal, semana) 
     VALUES('$nome', '$kcal', '$semana')" or die(mysqli_error($con)); 
     $sql = mysqli_query($con,$query); 

     if ($sql !== false) { // did insert work 
      $_SESSION['id_cardapio'] = mysqli_insert_id($con); 
     } else { 
      // insert did nto work?? 
     } 
} 
+0

工作效率100% - 這不是我一直在尋找的,但它是一個很好的幫助,謝謝!我只需等幾分鐘,看看是否有人可以在一個查詢中做到這一點 - 如果沒有人可以,我會選擇這個作爲回答 –

+0

@PedroMartinsNovaes它不能在一個查詢中完成;你可以在一個「插入如果失蹤」,但你不能「從插入選擇」。 – Uueerdo

+0

我現在明白了。這被選爲正確答案。感謝你們。 –

相關問題