Jump to content
  • 0

Проверка элементов массива с записями в БД


Пьер
 Share

Question

Существует таблица с ссылками, нужно перебрать массив $links и каждый элемент массива сравнить с записями в БД. Если записи совпадают, в поле status установить 1. Пытаюсь решить эту проблему с помощью вложенных циклов и оператора if, но ничего не получается. Помогите кто знает, пожалуйста.

Вот код:

$id=1;
$i=0;

//выборка из БД
$select=mysql_query("SELECT * FROM links");
$rows=mysql_fetch_array($select);

//внешний цикл. работает, пока есть записи в таблице
do
{
do//вложенный цикл. работает, пока в массиве $links есть элементы
{
if($rows['links']===$llinks[$i]&&$id!=$row['id'])//условие:если записи из массива и БД равны, но при этом id базы не равен $id
{
$update=mysql_query("UPDATE links SET status='1' WHERE links='".$llinks[$i]."'",$db);//то в поле статус заносим 1
}
$i++;
}
while($i<count($links));
$id++;
}
while($rows=mysql_fetch_array($select));

Данный фрагмент кода устанавливает 1 только в строку таблицы с id=1, причём независимо, равны записи БД с элементами массива или нет.

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Можно использовать функцию in_array()

$id=1;

//выборка из БД
$select=mysql_query("SELECT * FROM links");

//внешний цикл. работает, пока есть записи в таблице
while($rows=mysql_fetch_array($select))
{
if(in_array($rows['links'],$links)&&$id!=$row['id']){
$update=mysql_query("UPDATE links SET status='1' WHERE links='".$rows['links']."'",$db);

}
$id++;
}

Данный фрагмент кода устанавливает 1 только в строку таблицы с id=1, причём независимо, равны записи БД с элементами массива или нет.

Мне кажется вся проблема в том, что $id почти всегда будет совпадать с id в таблице, если id является AUTO_INCREMENT, поскольку $id увеличивается с каждой итерацией цикла

Link to comment
Share on other sites

  • 0

Не знаю, на сколько я окажусь прав, но я бы попробовал так:

foreach ($links as $link){
$select=mysql_query("SELECT * FROM links WHERE links='{$link}'");
$numrows = mysql_num_rows($select);
if ($select && $numrows){
$update=mysql_query("UPDATE links SET status='1' WHERE links='".$link."'",$db);
}
}

Как то так. Я не проверял, просто прикинул вариант.

И еще я не понял вашей авантюры с id, можете сами в мой код всатвить вашу логику про id.

Link to comment
Share on other sites

  • 0

Пересмотрел алгоритм и нашёл решение. Дело в том, что в БД данные заносились из того же массива $links. Мне нужно было убрать из БД повторяющиеся ссылки.

2Bolmazov, спасибо за напоминание о функции mysql_num_rows(). Она совсем вылетела у меня из головы. Вот решение:

//Делаем выборку из таблицы
$select=mysql_query("SELECT * FROM links");
$rows=mysql_fetch_array($select);
do
{
$links=$rows['links'];

//Определяем количество одинаковых ссылок
$result=mysql_query("SELECT * FROM links WHERE links='$links'");
$num=mysql_num_rows($result);

if($num>1)//Если одинаковых ссылок больше 1
{

//Оставляем одну, остальные удаляем.
$num=$num-1;
$delete=mysql_query("DELETE FROM links WHERE links='$links' LIMIT $num");

}
}
while($rows=mysql_fetch_array($select));

Сейчас всё работает.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy