Mysql "волшебный" поймать все столбец для выбора оператора - PullRequest
0 голосов
/ 04 декабря 2008

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

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, и возвращать все, что я хочу, используя представление или что-то еще?

Ответы [ 5 ]

3 голосов
/ 04 декабря 2008

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

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

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

2 голосов
/ 04 декабря 2008

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

OR 1=1

на конце.

2 голосов
/ 04 декабря 2008

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

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

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

1 голос
/ 04 декабря 2008

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

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

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

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

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

0 голосов
/ 04 декабря 2008

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

...