2013-04-18 2 views
0

У меня есть база данных, которая выглядит так.Запрос для получения данных, где переменная хранится в имени столбца

width | 10 | 20 | 30 | 40 
---------------------------- 
    10 | $2 | $3 | $4 | $5 
    20 | $3 | $4 | $5 | $6 
    30 | $4 | $5 | $6 | $7 
    40 | $5 | $6 | $7 | $8 

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

Или что является самым простым способом реорганизовать эти данные в новые столбцы?

РЕДАКТИРОВАТЬ:

Цифры в имени столбца являются высоты и числа в столбце шириной в ширину.

Если бы я был подключен к цифрам 10 для высоты и 20 для ширины, я бы хотел, чтобы 3 доллара был моим результатом.

Спасибо!

+0

может вам укажите пример того, какой результат вы хотите иметь? – Daanvn

+0

Вопрос очень неоднозначный. Что это за данные? Каковы эти «цифры», которые вы получаете? Приведите пример вашего ввода и ожидаемого соответствующего вывода. Какой код вы выполняете и какие ошибки вы получаете? –

+0

Предполагая, что речь идет о ширине/длине ... SELECT \ '20 \' WHERE width = '10 '? Лучше всего было бы иметь структуру «ширина», «длина», «цена» и сделать SELECT price WHERE width = '20 'и length = '10' – GarethL

ответ

1

Попробуйте это:

// assert $height column exists before the query 
$sql = "select {$height} 
     from table 
     where width = :b_width"; 
0

Я думаю, что вы ищете что-то вроде этого:

SELECT 
    CASE WHEN @height=10 THEN height10 
     WHEN @height=20 THEN height20 
     WHEN @height=30 THEN height30 
     WHEN @height=40 THEN height40 
    END value 
FROM yourtable 
WHERE 
    [email protected] 

Пожалуйста, смотрите скрипку here.

0

Лучшим способом было бы реорганизовать вашу базу данных с нормализованным дизайном.

table_1: высота, содержит один столбец с высоты вы имеете

table_2: ширину, содержит один столбец с шириной вы имеете

table_3: h_w_values, содержит 3 колонки: 1.Height, 2. Ширина, 3.значение пары

Это нормализуется, легко расширяется для N высот и ширины M. Дополнительно: рассмотреть table_4 для возможных значений (позволяет сказать, что вы фиксированные тарифы для ваших пакетов, или что угодно) и изменить table_3 к (высота, ширина, tariff_id)

Смежные вопросы