Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Каким способом можно проверить есть ли данная запись в базе данных?
 
 автор: dima_s_d_s   (12.07.2007 в 18:19)   письмо автору
 
 

Каким самым оптимальным способом можно проверить есть ли данная запись в БД ?

Допустим есть у нас БД в которой 20000 записей, я делаю проверку так


$title="Тут текст";

mysql_query ("SELECT news_title FROM news WHERE news_title='$title'", $dbi); 
$total=0;
while(list($news_title)= mysql_fetch_row($res))
{
if (strcmp($news_title, $title)==0) {$total=1;}
}


Тоесть если $total==0; тогда такой новости нет в БД

   
 
 автор: ШИМ   (12.07.2007 в 20:00)   письмо автору
 
   для: dima_s_d_s   (12.07.2007 в 18:19)
 


$query = mysql_query(........);

if(mysql_num_rows($query)>0)
// така строка есть


   
 
 автор: cheops   (13.07.2007 в 11:00)   письмо автору
 
   для: dima_s_d_s   (12.07.2007 в 18:19)
 

Можно воспользоваться следующим решением
<?php
  $title
="Тут текст"
  
$cnt mysql_query ("SELECT COUNT(*) FROM news WHERE news_title='$title'"$dbi);  
  if(!
$cnt) exit(mysql_error());
  if(
mysql_result($cnt0)) echo "Запись имеется";
  else echo 
"Записи нет";
?>

   
 
 автор: Евгений Петров   (14.07.2007 в 13:42)   письмо автору
 
   для: cheops   (13.07.2007 в 11:00)
 

Ещё можно написать так:
<?php 
  $title
="Тут текст";  
  
$cnt mysql_query ("SELECT 1 FROM news WHERE news_title='$title' LIMIT 1"$dbi);   
  if(!
$cnt) exit(mysql_error()); 
  if(
mysql_num_rows($cnt)) echo "Запись имеется"
  else echo 
"Записи нет"
?>

Почти тоже самое но в этом случае если он найдет хотя бы одну запись то не будет искать дальше. В случае с COUNT он просмотрит всю таблицу до конца. Если данных много то работать будет на порядок быстрее

   
 
 автор: oradev   (14.07.2007 в 16:54)   письмо автору
 
   для: Евгений Петров   (14.07.2007 в 13:42)
 


SELECT COUNT(1) FROM news WHERE news_title='$title';

   
 
 автор: Unkind   (14.07.2007 в 18:26)   письмо автору
 
   для: oradev   (14.07.2007 в 16:54)
 

COUNT(*)

   
 
 автор: oradev   (14.07.2007 в 19:22)   письмо автору
 
   для: Unkind   (14.07.2007 в 18:26)
 

COUNT(*) - не есть гуд, лучше COUNT(1)
Насколько я помню это ANSI/SQL

   
 
 автор: Unkind   (14.07.2007 в 20:57)   письмо автору
 
   для: oradev   (14.07.2007 в 19:22)
 

Наоборот.
http://www.phpclub.ru/detail/article/mysql_optimize

   
 
 автор: dima_s_d_s   (15.07.2007 в 12:46)   письмо автору
 
   для: Unkind   (14.07.2007 в 20:57)
 

Всем спасибо за помощь

   
 
 автор: Trianon   (16.07.2007 в 09:48)   письмо автору
 
   для: Евгений Петров   (14.07.2007 в 13:42)
 

Если уж пытаться оптимизировать запрос, то делать это до конца.

$sql = "SELECT ( COUNT(*) > 0 ) AS present  FROM news WHERE news_title='$title'";

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования