В указанном коде отсутствует шаг, на котором вы запрашиваете у пользователя GitHub-идентификатор , делая запрос GET https://github.com/login/oauth/authorize
. Я предполагаю, что вы включаете этот вызов где-то в своем коде, потому что необходимо получить значение sessionCode
, которое вы передаете в теле вашего запроса POST https://github.com/login/oauth/access_token
.
В любом случае, на этом шаге вы должны указать различные области действия , которые запрашивает ваше приложение. Запрошенные области передаются через параметр запроса scope
, разделенный пробелами, если вы запрашиваете несколько областей. Например, следующее является запросом для областей user
и public_repo
:
GET https://github.com/login/oauth/authorize?
client_id=...&
scope=user%20public_repo
Очень простой способ сделать это - добавить индекс UNIQUE
в 3 столбца. Когда вы пишете оператор ALTER
, включите ключевое слово IGNORE
. Примерно так:
ALTER IGNORE TABLE jobs
ADD UNIQUE INDEX idx_name (site_id, title, company);
Это приведет к удалению всех повторяющихся строк. В качестве дополнительного преимущества будущие дубликаты INSERT
будут ошибаться. Как всегда, вы можете сделать резервную копию, прежде чем запускать что-то вроде этого ...
Это работает на меня:
DELETE t1 FROM tablename t1
INNER JOIN tablename t2
WHERE
t1.id < t2.id AND
t1.title = t2.title AND
t1.company=t1.company AND
t1.site_ID=t2.site_ID;
MySQL имеет ограничения на обращение к таблице, из которой вы удаляете. Вы можете обойти это с помощью временной таблицы, например:
create temporary table tmpTable (id int);
insert tmpTable
(id)
select id
from YourTable yt
where exists
(
select *
from YourTabe yt2
where yt2.title = yt.title
and yt2.company = yt.company
and yt2.site_id = yt.site_id
and yt2.id > yt.id
);
delete
from YourTable
where ID in (select id from tmpTable);
Из предложения Костаноса в комментариях:
Единственный медленный запрос выше - это DELETE, для случаев, когда у вас очень большая база данных. Этот запрос мог бы быть быстрее:
DELETE FROM YourTable USING YourTable, tmpTable WHERE YourTable.id=tmpTable.id
У меня есть этот фрагмент запроса для SQLServer, но я думаю, что его можно использовать в других СУБД с небольшими изменениями:
DELETE
FROM Table
WHERE Table.idTable IN (
SELECT MAX(idTable)
FROM idTable
GROUP BY field1, field2, field3
HAVING COUNT(*) > 1)
Я забыл сказать вам, что этот запрос не удаляет строку с наименьшим идентификатором из повторяющихся строк. Если это сработает, попробуйте следующий запрос:
DELETE
FROM jobs
WHERE jobs.id IN (
SELECT MAX(id)
FROM jobs
GROUP BY site_id, company, title, location
HAVING COUNT(*) > 1)