Каким будет самый быстрый способ удалить все записи в каждой таблице базы данных с помощью id = 0
?Использование результата SELECT в качестве имени столбца в предложении WHERE
Было бы просто, если бы каждый стол был его первый столбец с именем id
, но в моем случае одна таблица первый столбец с именем id_tag
, другой таблицы - id_product
и т.д.
Я понял, что я могу получить имя первого столбца по:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'ps_tag' LIMIT 1
, но как я могу включить его в DELETE
запросе? Мне нужно что-то вроде:
DELETE FROM 'ps_tag' WHERE [first_column] = 0
Моя первая мысль была:
DELETE FROM 'ps_tag'
WHERE (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'ps_tag' LIMIT 1) = 0
но, очевидно, она не работает.
Вы собираетесь должны динамически создавать заявление. http://stackoverflow.com/questions/10480429/how-to-select-from-dynamic-table-name –
хорошо, что-то быстрее, чем вручную редактировать каждой таблицы хорошо –
Как уже упоминалось вы будете иметь для создания текста SQL, который вы запускаете позже. Если бы мне дали это делать. Хм, сколько записей мы смотрим? Я бы сгенерировал два запроса для каждой таблицы. 1) выберите все строки, которые будут удалены в «связанную временную таблицу». 2) Удалите строки в этой таблице. Легко восстановить, если что-то пойдет не так. –