Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
<?php
//Данные для подключения к БД
$host="localhost"; // Имя хоста
$bdname="baza"; // Имя БД
$bdlogin="baza"; // Логин к БД
$bdpassword="parol"; // Пароль к БД
$db=@mysql_connect($host,$bdlogin,$bdpassword);
if(!$db)die(mysql_error());
if(!@mysql_select_db($bdname,$db))die(mysql_error());
$query_dubl=mysql_query("SELECT * FROM tablica ",$db);
while($urls=mysql_fetch_array($query_dubl)){
$query_dubl2=mysql_query("SELECT * FROM tablica WHERE URL = '".$urls['URL']."'" ,$db);
if(mysql_num_rows($query_dubl2)==1)
{echo "совпадений нет <br> ";
}else {$update=mysql_query("UPDATE tablica SET isdubl='1' where URL = '".$urls['URL']."'",$db);}
}
?>
Такой селект выберет из нескольких одинаковых записей один id как уникальный, правильно? А надо пометить все дубли, чтобы потом выбрать из них наилучшую запись.получаешь идентификаторы записей с урлами, они будут выступать как не-дубли:
Код:SELECT DISTINCT `id` FROM `test` GROUP BY `url`
Да. Вот это главное препятствие. Никак не могу понять эту парадигму.далее обновляешь поле "isdubl" у всех записей кроме этих выбранных:
p.s. одним запросом такое реализовать не получится, т.к. mysql не разрешает использовать 1 и ту же таблицу одновременно для чтения и записи.Код:UPDATE test SET is_dubl = 1 WHERE id NOT IN 'тут твои айдишники'
UPDATE `isdubl`=1 from `table` where
(
SELECT `URL`
FROM `table`
GROUP BY `URL`
HAVING ( COUNT(`URL`) > 1 )
)
SELECT `URL`
FROM `table1`
GROUP BY `URL`
HAVING ( COUNT(`URL`) > 1 )
UPDATE `table1` SET `is_dubl` = 1 WHERE URL IN 'Все значения URL из table2'
а можно написать хранимую процедуру, это уже вопрос оптимизации и в рамках поставленной ТС задачи роли не играет.можно не делать select * , так как работаем только по одному полю:
UPDATE `test` SET `is_dubl` = 1 WHERE `url` IN(SELECT `url` FROM (SELECT `url` FROM `test` GROUP BY `url` HAVING (COUNT(`url`) > 1)) AS `temp`)
То что надо. Так и знал что есть красивое и элегантное решение в одну строчку.Все делается одним запросом:
Код:UPDATE `test` SET `is_dubl` = 1 WHERE `url` IN(SELECT `url` FROM (SELECT * FROM `test` GROUP BY `url` HAVING (COUNT(`url`) > 1)) AS `temp`)
DELETE FROM `item` WHERE `id` NOT IN(SELECT MIN(`id`) FROM `item` GROUP BY `h_all`)