Mysql "волшебный" захват всех столбцов для оператора select

Есть ли способ сделать выбор как таковой

select * from attributes where product_id = 500

вернется

id  name     description
 1  wheel    round and black
 2  horn     makes loud noise
 3  window   solid object you can see through

и запрос

select * from attributes where product_id = 234

вернет те же результаты, что и любой запрос к этой таблице.

Теперь, очевидно, я мог бы просто удалить предложение where и продолжить свой день. Но это связано с редактированием кода, который я действительно не хочу изменять, поэтому я пытаюсь исправить это на уровне базы данных.

Так есть ли «волшебный» способ игнорировать то, что находится в предложении where, и возвращать все, что я хочу, используя представление или что-то еще?

Этот вопрос неверен на многих уровнях, я не знаю, с чего начать ...

some 04.12.2008 02:07

пожалуйста, критика лучше, чем оскорбление в любой день

SeanDowney 04.12.2008 02:50
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
751
5

Ответы 5

Даже если бы это было возможно, я сомневаюсь, что это сработает. Оба предложения WHERE ожидают, что будет возвращена одна вещь, поэтому код, вероятно, будет использовать только первую возвращенную строку, а не все из них.

Это также придаст базе данных поведение, которое заставит будущих разработчиков выдернуть голову, пытаясь понять.

Сделайте это правильно и исправьте код.

или вы можете передать "product_id" вместо целого числа, если для этого нет проверки кода ... так что запрос будет выглядеть следующим образом:

выберите * из атрибутов, где product_id = product_id;

это даст вам каждую строку в таблице.

Вы можете использовать метаданные набора результатов, чтобы получить желаемое, но в наборе результатов не будет описаний полей. Конкретный API для получения метаданных набора результатов из подготовленного запроса зависит от языка программирования, и вы не сказали, какой язык вы используете.

Вы можете запросить INFORMATION_SCHEMA для таблицы продуктов.

SELECT ordinal_position, column_name, column_comment
FROM INFORMATION_SCHEMA.columns
WHERE table_name = 'products' AND schema_name = 'mydatabase';

Вы можете реструктурировать базу данных в стиле Сущность-Атрибут-Значение, но это гораздо более амбициозное изменение, чем исправление кода.

Или вы можете полностью отказаться от баз данных SQL и использовать хранилище семантических данных, такое как RDF, которое позволяет запрашивать метаданные объекта так же, как вы запрашиваете данные.

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

Уловка с этим подходом состоит в том, чтобы сопоставить имя столбца в информационной схеме с фактическим столбцом в таблице продуктов. Для этого потребуется гигантское выражение CASE.

Bill Karwin 04.12.2008 22:07

Если вы не можете редактировать запрос, может быть, вы можете добавить к нему? Вы могли бы придерживаться

OR 1=1

в конце.

Другие вопросы по теме