2013-07-12 3 views
0

У меня есть сообщение с разными названиями/aka's. Теперь, когда пользователь добавляет сообщение, я хочу проверить, есть ли сообщение с этим заголовком.Количество столбцов не соответствует количеству значений в строке 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, а другой пользователь добавляет то же самое и хочет, чтобы имя было A. Я должен проверить, есть ли он там. (Sry для моего englisch, это не мой родной язык ..) – Fox

+0

Что означает alias1,2,3,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' не может генерировать такую ​​ошибку, там должно быть INSERT в другом месте с несогласованными столбцами/значениями. –

+0

THX, теперь я нашел проблему! Я был уверен, что ошибка должна быть из SELECT, но она была в моем INSERT-Query. – Fox

 Смежные вопросы

  • Нет связанных вопросов^_^