Как провериь наличие чего-либо в БД?

Статус
В этой теме нельзя размещать новые ответы.

Solomon Kane

Постоялец
Регистрация
26 Авг 2009
Сообщения
144
Реакции
9
Предположим, в БД есть три айди - 1, 2, 3. Предположим, также, что есть функция, которая получает откуда-то айди, который потом участвует в запросе к БД. Как проверить, есть ли вообще такой айди в БД. Например, вот:

1) получаем id из функции;

2) проверяем, есть ли вообще такой id в БД;

3) если есть, то..., если нет, то...

И так далее.
 
делайте sQL запрос к БД на выборку записей ( или количество записей )с таким айди ...


PHP:
select count(*) from table where id = xxx
где xxx - айди который вы получаете из вашей функции

если количество не 0 - значит записи есть ... в противном случае нет
 
Предположим, в БД есть три айди - 1, 2, 3. Предположим, также, что есть функция, которая получает откуда-то айди, который потом участвует в запросе к БД. Как проверить, есть ли вообще такой айди в БД. Например, вот:
1) получаем id из функции;
2) проверяем, есть ли вообще такой id в БД;
3) если есть, то..., если нет, то...
И так далее.
Позволь полюбопытствовать, что это за задача, которая требует такой проверки ID. Предчуствую, что она решится и без лишнего запроса к БД.
 
В функцию идёт id, впоследствии этот id используется для отображения страниц, категорий и прочего. Нужно проверять, существует ли id, чтобы на основании этого предпринимать те или иные действия.
 
В функцию идёт id, впоследствии этот id используется для отображения страниц, категорий и прочего. Нужно проверять, существует ли id, чтобы на основании этого предпринимать те или иные действия.
В таком случае лучше будет сделать так:
PHP:
function getNews($IDs)
{
$news=array();
$res=mysql_query("SELECT id,.... FROM table WHERE id IN ($IDs)..."); // Делаешь запрос согласно списка  ID, не смотря, есть такие в БД или нет.
$IDs=implode(", ", $IDs); приводим список IDS к виду "1,2,3..N"
while()$row  = mysql_fetxc_assoc($res){
  $result[$row['id']]=$row; //фетчишь что нашлось в массив, где ID - ключи
return  $news;
}
.....
$IDs = getIds(); //допустим функция которая получает список ID ввиде массива 
$news=getNews($IDs);
foreach($IDs as $ID){
  if(isset($news[$ID])){ 
     //Если был такой ID в базе - чето делаешь, например выводишь новость
  }else{
    //Если небыло - предпринимаешь свои действия. Хотя нужно ли..
  }
}
Таким образом избаишься от лишнего запроса.
 
не
PHP:
while()$row  = mysql_fetxc_assoc($res){
а
PHP:
while($row  = mysql_fetxc_assoc($res)){

а вообще эту задачу вполне можно решить подзапросами
 
Я дело в том, что юзаю класс active record, а там запросы строятся иначе, поэтому я пока не разбирался особо. Может, можно сделать и так, как описано выше. Но чем в принципе пересчёт плох? Берёт и считает всё, что есть с таким id. Если ничего нет, возвращает ноль. С нулём удобно работать. А как по производительности? Может, и смысла нет, так как будет по производительности то же самое.
 
Предположим, в БД есть три айди - 1, 2, 3. Предположим, также, что есть функция, которая получает откуда-то айди, который потом участвует в запросе к БД. Как проверить, есть ли вообще такой айди в БД. Например, вот:
1) получаем id из функции;
2) проверяем, есть ли вообще такой id в БД;
3) если есть, то..., если нет, то...
И так далее.
Я так понимаю, 3-ий пункт предполагает последующее обращение к базе? Если так, то почему не сделать проверку айди уже в запросе к БД? Путем подзапроса или просто условием? Без запроса к базе эта задача невыполнима. Так зачем плодить количество запросов?
 
Я дело в том, что юзаю класс active record, а там запросы строятся иначе, поэтому я пока не разбирался особо. Может, можно сделать и так, как описано выше. Но чем в принципе пересчёт плох? Берёт и считает всё, что есть с таким id. Если ничего нет, возвращает ноль. С нулём удобно работать. А как по производительности? Может, и смысла нет, так как будет по производительности то же самое.
Такой запрос достаточно быстро обрабатывается, потому что индекс по id строится автоматом. Попробуй. Если будет тормозить, тогда уже оптимизируй.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху