2015-02-14 3 views
1

я следующие данные в таблице ..PHP MySQL Query, чтобы проверить, если запись существует или нет

+-------------+---------------+--------------+ 
| activity_id | activity_name | main_unit_id | 
+-------------+---------------+--------------+ 
|   1 | DEA   |   67 | 
|   2 | DEB   |   68 | 
|   3 | DEC   |   68 | 
|   4 | fasdfsadf  |   74 | 
+-------------+---------------+--------------+ 

я хочу добавить еще один активность, но перед добавлением я должен убедиться, что то же самое название деятельность не там против main_unit_id ... я пишу следующий запрос,

$SQL_CHECK_ACTIVITY = mysql_query(
    "SELECT count(*) FROM activities " . 
    "WHERE main_unit_id = '67' and activity_name = 'DEA'" 
); 
$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY); 
echo $RESULT_SQL_CHECK_ACTIVITY; 

затем распечатать 1, что означает активность в отношении этого проекта уже существует ...

$SQL_CHECK_ACTIVITY = mysql_query(
    "SELECT count(*) FROM activities " . 
    "WHERE main_unit_id = '78' and activity_name = 'afsdaf'" 
); 
$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY); 
echo $RESULT_SQL_CHECK_ACTIVITY; 

затем распечатать 1 что означает активность против этого проекта уже существует ... , но нет ни одной записи в этом случае ....

+1

Причина вы получаете 1 во втором случае является то, что вы ищете на количество возвращаемых строк, а не само значение. Запрос возвращает одну строку со значением 0. –

ответ

0
$SQL_CHECK_ACTIVITY = mysql_query("SELECT * FROM activities WHERE main_unit_id = '".$project."' and activity_name = '67' limit 1"); 
    if(mysql_fetch_row($SQL_CHECK_ACTIVITY)) { 
     echo 'a activity against this project already exists...'; 
     } 
     else{ 
} 
2

Если вы хотите добавить другую деятельность, но не хочет дубликатов на main_unit_id, то правильный подход, чтобы создать уникальный индекс (или ограничение) на поле:

create unique index idx_activities_mainunitid on activites(main_unit_id); 

При попытке вставить дубликат, вставка потерпит неудачу.

2

mysql_num_rows вернет количество строк, а не результат count(*).

В первом тесте, count(*) будет возвращать 1 в один ряд, так что результат будет равен 1.

Во втором тесте, count(*) будет возвращать 0 в один ряд, так что результат будет по-прежнему be 1.

Для получения результата count(*) вам необходимо будет использовать функцию выборки, а не mysql_num_rows.

Редактировать

Т.е. от:

$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY); 

To:

list ($RESULT_SQL_CHECK_ACTIVITY) = mysql_fetch_row($SQL_CHECK_ACTIVITY); 

Примечание: Использование mysql_* функций считаются устаревшими и вы должны использовать что-то, что обеспечивает более высокую безопасность и большую функциональность, таких как MySQLi или PDO.

+0

Я знаю это, но как я получу статус в моем случае. –

+0

Замените строки 'mysql_num_rows' на' list ($ RESULT_SQL_CHECK_ACTIVITY) = mysql_fetch_row ($ SQL_CHECK_ACTIVITY); '. См. Править. – mhall

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