Обновить таблицу MySQL на основе строки = имя столбца - PullRequest
1 голос
/ 19 июля 2010

Немного предыстории, чтобы вы поняли, что я пытаюсь сделать.Я делаю страницу, которая берет два продукта пользовательского ввода и проверяет, совместимы ли они друг с другом.Это n + 1 * n таблица MySQL, потому что есть n продуктов.

Таблица выглядит как

name    a    b    c    d    e
a
b
c
d
e

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

name    a    b    c    d    e
a       1
b            1
c                 1
d                      1
e                           1

Спасибо

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

Ответы [ 2 ]

5 голосов
/ 19 июля 2010

Не прямой ответ на ваш вопрос, но я чувствовал, что должен был упомянуть об этом ...

Если возможно, вам следует рассмотреть возможность изменения вашего дизайна на следующее:

compatible_products
product1 product2
a        b
a        c
b        d
etc...

Если вы вставляете строки для (a, b) и (b, a), тогда ваш запрос прост:

SELECT 1
FROM compatible_products
WHERE product1 = 'a' AND product2 = 'b'

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

3 голосов
/ 19 июля 2010

Не ответ на ваш вопрос, но это звучит как ошибка проектирования.

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

Я думаю, что намного лучше было бы нормализовать таблицу в одну products и одну compatibility таблицу.

Каждое отношение совместимости между продуктом и другим было бы одной записью.

Таблица compatibility может выглядеть так:

id   product1    product2    

0    12          34          
1    33          32          
2    54          1           
3    65          328    

Запросы станут чрезвычайно простыми.Чтобы выяснить отношения, вам нужно сделать простую

SELECT id FROM compatibility WHERE (product1 = 18 and product2 = 23) 
                                OR (product1 = 23 and product2 = 18)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...