2013-07-12 36 views
0

我有不同標題/ aka的帖子。現在,當用戶添加帖子時,我想檢查是否已經有一個帖子與該標題。列計數與第1行的值計數不匹配 - 檢查MySQL中的某列是否是唯一的

我的表看起來像這樣:

 +----------+-------------+------+-----+---------+-------+ 
     | Field | Type  | Null | Key | Default | Extra | 
     +----------+-------------+------+-----+---------+-------+ 
     | Titel | varchar(50) | NO |  | NULL |  | 
     | Alias1 | varchar(50) | YES |  | NULL |  | 
     | Alias2 | varchar(50) | YES |  | NULL |  | 
     | Alias3 | varchar(50) | YES |  | NULL |  | 
     | Alias4 | varchar(50) | YES |  | NULL |  | 
     +----------+-------------+------+-----+---------+-------+ 

,後附加的表現公式是送的,我確認是這樣的:

include('./includes/database.php'); 
$sql = 'SELECT 
      Titel 
     FROM 
      Posts 
     WHERE 
      Titel = \''.$titel.'\' OR 
      Alias1 = \''.$titel.'\' OR 
      Alias2 = \''.$titel.'\' OR 
      Alias3 = \''.$titel.'\' OR 
      Alias4 = \''.$titel.'\' OR 
      Titel = \''.$titel2.'\' OR 
      Alias1 = \''.$titel2.'\' OR 
      Alias2 = \''.$titel2.'\' OR 
      Alias3 = \''.$titel2.'\' OR 
      Alias4 = \''.$titel2.'\' OR 
      Titel = \''.$titel3.'\' OR 
      Alias1 = \''.$titel3.'\' OR 
      Alias2 = \''.$titel3.'\' OR 
      Alias3 = \''.$titel3.'\' OR 
      Alias4 = \''.$titel3.'\' OR 
      Titel = \''.$titel4.'\' OR 
      Alias1 = \''.$titel4.'\' OR 
      Alias2 = \''.$titel4.'\' OR 
      Alias3 = \''.$titel4.'\' OR 
      Alias4 = \''.$titel4.'\' OR 
      Titel = \''.$titel5.'\' OR 
      Alias1 = \''.$titel5.'\' OR 
      Alias2 = \''.$titel5.'\' OR 
      Alias3 = \''.$titel5.'\' OR 
      Alias4 = \''.$titel5.'\' 
     LIMIT 
      1'; 
$result = $db->query($sql); 
if (!$result) { 
    die ('Can\'t send: '.$sql."<br />\nError: ".$db->error); 
} 
if ($result->num_rows) { 
    $row = $result->fetch_assoc(); 
    $errorcounter++; 
    $errors[$errorcounter] = '<p id="info" class="error">Already exists:<br><a href="./index.php?post='.$row['Titel'].'">'.$row['Titel'].'</a></p>'; 
} 

但我認爲這不是最好的辦法做到這一點,有人可以告訴我這可以做得聰明嗎?

和最重要的:它不工作,我得到這個錯誤: 列數並不在行1

+0

那麼,爲什麼你不檢查只有標題,而是別名,但是這可以通過循環來實現 –

+0

因爲其他用戶可以添加一個帖子與其他標題。可以稱爲A或B或C.用戶認爲最好的標題是C,另一個人認爲B更好。當用戶添加一個帖子並將其命名爲C,並且其他用戶添加該帖子並且想要它時,我必須檢查它是否已經存在。 (Sry爲我的英語,它不是我的母語..) – Fox

+0

alias1,2,3,4代表什麼,它們如何用於你的邏輯,以及爲什麼它們不能只用一列進行更改,而不是用4列 –

回答

0

匹配值計數這是一個有點短,不過還是挺無效:

$sql = "SELECT 
      Titel 
     FROM 
      posts 
     WHERE 
      Titel IN ('".$titel."','".$titel1."','".$titel2."','".$titel3."','".$titel4."') OR 
      Alias1 IN ('".$titel."','".$titel1."','".$titel2."','".$titel3."','".$titel4."') OR 
      Alias2 IN ('".$titel."','".$titel1."','".$titel2."','".$titel3."','".$titel4."') OR 
      Alias3 IN ('".$titel."','".$titel1."','".$titel2."','".$titel3."','".$titel4."') OR 
      Alias4 IN ('".$titel."','".$titel1."','".$titel2."','".$titel3."','".$titel4."') 
     LIMIT 
      1"; 

您應該考慮將別名放入單獨的表中並將其鏈接到Posts表。因此你只需要檢查一個字段。

+0

Thx,至少看起來更好:D但它會解決我得到的錯誤? – Fox

+0

@ user2575625現在,關於這一點:'SELECT'語句不能產生這樣的錯誤,應該在其他地方插入不匹配的列/值計數。 –

+0

THX,現在我發現問題了!我確信這個錯誤必須來自SELECT,但它在我的INSERT-Query中。 – Fox

相關問題