2009-08-03 9 views
1

Как я могу смотреть в таблицу и искать, существует ли строка. задняя колонна за ней - стол называется врагами. Каждая строка имеет уникальный идентификатор и имеет значение auto_increment. Каждая строка также имеет уникальное значение, называемое монстридом. идентификатор монстра не является auto_increment.Проверка наличия данных в таблице

Когда монстр умирает, строка удаляется и заменяется новой строкой. поэтому идентификатор всегда меняется. а также изменен монстров.

Я использую в PHP метод $ _GET и MonsterID проходит через него, в основном я пытаюсь сделать это

$ MonsterID = 334322 // это идентификатор передается через $ _GET

checkMonsterId = "проверьте, если идентификатор монстра существует в таблице врагов"

если MonsterID существует тогда
{RUN PHP}

еще
{RUN PHP}

Если вам нужно больше ясности, пожалуйста, спросите. и спасибо за помощь заранее.

ответ

6

Используйте count! Если он возвращает> 0, он существует, иначе это не так.

select count(*) from enemies where monsterid = 334322 

Вы могли бы использовать его в PHP константы выглядит (после подключения к базе данных):

$monsterID = mysql_real_escape_string($monsterID); 
$res = mysql_query('select count(*) from enemies where monsterid = ' . $monsterid) or die(); 
$row = mysql_fetch_row($res); 
if ($row[0] > 0) 
{ 
    //Monster exists 
} 
else 
{ 
    //It doesn't 
} 
+0

+1 для того, чтобы хотя бы избежать вещи. – nos

+0

Спасибо, Эрик, за ответ. Кажется, я получаю Resource #ID 5 сейчас. – Jesse

+0

Я заработал. Использование вашего метода. еще раз спасибо Эрик за вашу помощь. – Jesse

0

mysql_real_escape_string важно предотвратить SQL injection.

$monsterid = mysql_real_escape_string($_GET['monsterid']); 
$query = intval(mysql_query("SELECT count(*) FROM enemies WHERE monsterid = '$monsterid')); 
if (mysql_result > 0) { 
    // monster exists 
} else { 
    // monster doesn't exist 
} 
0

Используйте граф, как

SELECT COUNT (*) от врагов, где MonsterID = 334322

Однако обязательно убедитесь, что вы добавили индекс по MonsterID к столу. Причина в том, что если вы этого не сделаете, и это не первичный ключ, тогда rdbms будет вынуждена выдать полное сканирование таблицы - прочитайте каждую строку - чтобы вернуть вам значение. На небольших наборах данных это не имеет значения, поскольку таблица, вероятно, будет сидеть в ядре в любом случае, но как только количество строк станет значительным, и вы нажмете диск, чтобы сделать сканирование, разница в скорости может быть легко на два порядка или больше.

Если количество строк - очень, то небольшая, а не индексация рациональна, так как использование индекса непервичного ключа требует дополнительных накладных расходов при вставке данных, однако это должно быть определенное решение (я регулярно накладываю впечатление на клиентов, которые использовали программист, который не понимает базы данных, добавляя индексы к таблицам, которые были хороши, когда кодер их создал, но впоследствии замедлял сканирование при загрузке с реальными объемами данных - довольно удивительно, как одна строка sql для добавления индекса купит вам гуру статус в глазах ваших клиентов заставляет вас снова использовать свою систему).

Если вы выполняете более сложные запросы к базе данных с помощью подзапроса, что-то вроде поиска всех мест, где нет монстра, а затем посмотрите на использование предложения sql EXISTS. Это часто упускают из виду программисты (искушение состоит в том, чтобы вернуть счет фактических значений), и использование его обычно быстрее, чем альтернативы.

+0

Я обязательно рассмотрю условие EXISTS. Спасибо за совет. – Jesse

0

Simpler:

выбрать 1 из врагов там, где MonsterID = 334322

Если она возвращает строку, у вас есть строка, если нет, то нет.

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