sql запрос + php (need help)

Lord Maverik
На сайте с 15.04.2003
Offline
471
365

В общем не могу сообразить сам. Как наиболее оптимально сделать следующее.

Есть таблица (ТА) на ~15000 записей.

ТА: поля ID(число) и Data(строка).

Есть таблица TB на ~ 40000 записей.

ТВ поля: Data(строка) и Pos(bool)

Периодически надо делать следующее.

Всем полям TB.Pos присвоить 1, где для которых есть запись в таблице TA.

Хелп плиз :)

RedMall.Ru (https://redmall.ru) - Товары из Китая (Таобао, Tmall) с проверкой качества, скидка для форумчан 7% Партнерская программа 2 уровня: 5% + 5%. Подробнее. (https://redmall.ru/about/partner/)
bay_ebook
На сайте с 28.05.2010
Offline
111
#1
Lord Maverik:
В общем не могу сообразить сам. Как наиболее оптимально сделать следующее.

Есть таблица (ТА) на ~15000 записей.
ТА: поля ID(число) и Data(строка).

Есть таблица TB на ~ 40000 записей.
ТВ поля: Data(строка) и Pos(bool)

Периодически надо делать следующее.
Всем полям TB.Pos присвоить 1, где для которых есть запись в таблице TA.

Хелп плиз :)

Могу протупить, я еще не спал, но что-то вроде такое:


UPDATE `TB` SET `TB`.`pos` = 1 WHERE `TB`.`data` = (SELECT `TA`.`data` FROM `TA` WHERE `TA`.`data` = `TB`.`data`)
Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
[Удален]
#2

Вот так =) 100% рабочий

UPDATE `TB` SET `TB`.`pos` = 1 WHERE `TB`.`data` IN ((SELECT `TA`.`data` FROM `TA`))

P
На сайте с 30.10.2008
Offline
133
#3

Здравствуйте.

UPDATE tb SET tb.`pos` = 1 WHERE EXISTS( SELECT * FROM ta WHERE ta.`date` = tb.`date`)

работает быстро, но нужно два ньюанса:

дату лучше делать не строкой, а date или datetime или даже int

на колонку с датами на обоих таблицах обязательно нужно сделать индекс

[Удален]
#4

как я понимаю тут не date , а data (данные , а не дата )

Lord Maverik
На сайте с 15.04.2003
Offline
471
#5
pacandar:
дату лучше делать не строкой, а date или datetime или даже int

да лучше, но

Belkov:
тут не date , а data (данные , а не дата )

:)

Спасибо за помощь всем!

[Удален]
#6

мой запрос юзай=) при твоем кол-ве данных ничего плохого не произойдет на сервере

siv1987
На сайте с 02.04.2009
Offline
427
#7

UPDATE `TB` INNER JOIN TA ON TB.`data`=TA.`data` SET TB.pos=1

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий