2012-01-31 178 views
-2

好吧,標題可能有點誤導。我想要做的是添加一個最喜歡的系統到我的網站。我爲我最喜歡的東西準備了一個專欄,我在每個商品ID之後都設置了一個:。如何檢查從我的數據庫返回的字符串(1345:13456:232:524378:324)如果它包含232?如果是這樣,我會迴應preRend否則我會迴應insert並插入該ID後跟:。這是我到目前爲止:PHP檢查MySQL表是否包含值

<?php 
session_start(); 
require_once(".conf.php"); 
$logged = $_SESSION['logged']; 
$user = $_SESSION['user']; 
$fwdfav = $_POST['id']; 
$query = mysql_query("SELECT * FROM accountController WHERE user='$user'"); 

if ($logged == 1) 
{ 
    while ($row = mysql_fetch_array($query)) { 
    if ($row['fav-itms'] //This is where I got stuck. How to check if it contains a value.) 
     { 
      mysql_query("INSERT INTO accountController ('fav-itms') VALUES ('$fwdfav')"); 
      echo 'inserted'; 
     } 
     else 
     { 
      echo 'preRend'; 
     } 

    } 
} 
else 
{ 
    echo 'nlog'; 
} 
?> 

非常感謝!我相信這裏有很多錯誤,因爲我很累。

+6

**不要在關係數據庫列中存儲分隔字符串**使用[交接表](http://en.wikipedia.org/wiki/Junction_table)創建*多對多*關係 – Phil 2012-01-31 04:28:08

+0

壞主意取決於系統,但假設你負責代碼和數據庫,它不是一種理智的方式,因爲關係表非常易於管理,並且可以完全消除你在這裏提到的問題。如果你的網站很小,那麼爆炸與簡單加入的處理沒有什麼區別,所以理性的論點是這種方法的可持續性,並且如果其他任何人還活着願意拿起你離開的地方。如果我肯定繼承了這種方法,我會生氣。特別是考慮關係表的設置和管理有多容易。 – 2012-01-31 04:38:41

+0

@JosephTorraca,那麼擁有一個數據庫有什麼意義呢?爲什麼不把所有內容都轉儲爲400列寬的CSV?答案當然是,你不能輕鬆地對你在該領域擁有的數據進行排序,加入,聚合或其他任何事情。你正在渲染你的數據庫對這些數據沒用。 – Brad 2012-01-31 04:39:34

回答

2

你正在服用的方法是非常低效的,並沒有考慮的事實,你的優勢正在使用數據庫。

(順便說一句...我希望這只是示例代碼,你必須在你的INSERT查詢一個巨大的SQL注入漏洞。)

我會做的,而不是爲創建一個看起來像第二個表:

favorites (
    id int(11) NOT NULL auto_increment, 
    user_id int(11), 
    fav_id int(11) 
) 

並讓每一行都代表一個用戶喜歡的對。然後,你可以讓MySQL的做搞清楚用戶是否收藏東西的重任,例如,

SELECT COUNT(*) FROM favorites WHERE user_id = %d AND fav_id = %d; 
// Substitute the actual look-up values in using prepared statements 

你也可以同樣迅速得到了用戶的實際收藏夾等

記住,數據庫旨在用於快速存儲和查找信息的明確目的。 PHP是一種通用編程語言。在可能的情況下,讓MySQL爲你做好準備。如果你需要處理數百萬併發用戶,顯然需要更多的優化,而傳統的關係數據庫可能甚至不適合,但我沒有得到印象這就是你現在的位置。)

+0

是的,這只是示例代碼,以解釋我的意思。而且你是對的,我沒有接近大規模,數百萬的要求,儘管我想成爲。也許幾年。這是如何做關係數據庫的一個很好的例子,我想我會在我的網站上使用這個確切的例子。太感謝了! – 2012-01-31 04:45:19

1

你可以在陣列爆發,作爲檢查,如:

 

$yourArr = explode(":", $row['fav-itms']); 
$checkFor = 232; 
if(in_array($checkFor, $yourArr)) { 
    //it exists 
} 
else { 
    //does not exist 
} 
 

你的意思是這樣

+0

好吧,如果這解決了您的問題,那麼您可以讓它接受.. :) – 2012-01-31 04:32:57

+1

請不要這樣做...閱讀以上評論和下面。 – 2012-01-31 04:41:21

0

我知道這是前一段時間發佈的,但是當我進行搜索時就出現了。

我有一個數據庫存儲我的投資組合的信息,它包含圖像的位置。

我正在一個頁面上顯示項目的完整視圖。在頁面內,我需要它檢查圖像的列,如果有任何是空的,我需要它不顯示任何東西。

這就是我已經做到的。

//連接,選擇數據庫,查詢與頁面相關的表。我已經完成了對特定行的查詢。

if($row[columnName1]){ 
     echo '<div> displaying value </div>'; 
    } 
    if($row[columnName2]){ 
     echo '<div> displaying value </div>'; 
    } 

發生了什麼,如果所選行中的columnName1具有值,則顯示div中的值else否。然後到第2欄。

如果是這樣

if(!$row[columnName1]){ 
      //content displayed 
    } 

完成,列不包含值又是什麼在{}將跑之間。

以我需要的方式工作,也許這會幫助某人。