Обновлять только одну строку в запросе на основе неуникальных параметров? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть большая таблица с дублирующимися ключами, которую я пытаюсь подключить к меньшей таблице с уникальными ключами.Я точно знаю, что не будет совпадений для всего.Я хочу, чтобы совпадение из моей таблицы меньшего размера обновляло одну строку в таблице большего размера, а затем переходило к следующей строке таблицы меньшего размера для следующего обновления.Мне это нужно, потому что я пытаюсь создать уникальные идентификаторы в большой таблице, поскольку каждая строка представляет продукт реального мира, который имеет свою собственную иерархию объектов реального мира.

Так, например,

bigtable
barcodeSnippet        t_stamp       workId       parentCase    newId
aaaa                  time1         1            1             NULL
aaaa                  time1         1            1             NULL
aaaa                  time1         1            1             NULL

и моя маленькая таблица может иметь этот

smalltable
id   barcodeSnippet      t_stamp      workId      parentCase
1    aaaa                time1        1           1
2    aaaa                time1        1           1

конечный результат, который я хочу получить в своей большой таблице:

bigtable
barcodeSnippet        t_stamp       workId       parentCase    newId
aaaa                  time1         1            1             1
aaaa                  time1         1            1             2
aaaa                  time1         1            1             NULL

, где я выполнял только один раз для каждой строки и осталсяс NULL, поскольку у меня было 3 строки в большой таблице и два совпадения в моей меньшей.

Мой текущий запрос

UPDATE bigtable as bt
JOIN smallTable as st ON (bt.barcodeSnippet = b.barcodeSnippet AND 
bt.parentCase= st.parentCase and bt.t_stamp = st.t_stamp and bt.workId = 
st.workId)
SET bt.bottlesId = st.id;

не работает, и я не вижу возможностииспользовать LIMIT в ОБНОВЛЕНИИ для MySQL.Я видел другие ответы в MS SQL, где вы можете использовать TOP 1, возможно, где newId IS NULL, но снова я использую MySQL здесь.

Я думаю, что мне может понадобиться использовать подход хранимой процедуры / курсорано даже при этом мне кажется, что я столкнусь с проблемой запуска оператора обновления, а затем вернусь к квадрату 1.

Есть идеи?Использование MySQL 5.6.

РЕДАКТИРОВАТЬ: думаю, у меня есть достойное решение.Я только что обновил свой запрос, поэтому у меня есть дубликаты.Однако теперь я добавил столбец с номером строки.Я планирую присоединиться к самой таблице и обновить ее, если номер строки <номер строки, поэтому я сохраняю верхний идентификатор и могу превратить остальные в ноль, что подходит. </p>

Что-то вроде этого

UPDATE bigtable tb
JOIN bigtable tb2 ON tb.newId = tb2.newId
SET tb.newId = NULL
WHERE tb.rowNumber < tb2.rowNumber;

1 Ответ

0 голосов
/ 25 февраля 2019

Вы используете столбец идентификатора auto_incremented с суперглобальным $_GET:

1.php <?php $var = $row["id"]; ?> <a href="2.php?id=<?php echo $var; ?>">Something</a>

Затем в 2.php

<?php $id = $_GET["id"]; $sql = "SELECT * FROM table WHERE id='$id';"; Конечно, вы должны использовать подготовленные заявления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...