MYSQL / Coldfusion CFQUERY: Как избежать перезаписи данных с помощью SELECT t1. *, T2. *? - PullRequest
0 голосов
/ 22 марта 2011

Я ищу способ сделать это, не перечисляя все имена полей и используя AS для каждого.Может быть, это больше вопрос MySQL.Чтобы быть понятным, я предлагаю пример:

table1: users
+-id-+------name------+-preferred_moose_id-+-preferred_preparation_id-+
| 20 | Chester Chore  |          1         |             3            |
| 72 | George Garnish |          2         |             2            |
| 88 | Liver Laddykin |          2         |             3            |
+----+----------------+--------------------+--------------------------+

table2: moose_types
+-id-+------name------+-------size------+---------------diet--------------+
| 1  | Canadian Moose | Pretty Big      | Corn and snow                   |
| 2  | Red Moose      | Not as big      | Dolphins                        |
| 3  | Horses         | Size of a horse | Oats, cheese, okra, and farmers |
+----+----------------+-----------------+---------------------------------+

table3: preparation_types
+-id-+-------name-------+-difficulty-+
| 1  | Boiled           |     3      |
| 2  | Stuffed          |     5      |
| 3  | Butterflied      |     9      |
+----+------------------+------------+

Если у меня SQL такой:

SELECT users.*, moose_types.*, preparation_types.*
  FROM users
 INNER JOIN moose_types ON moose_types.id = users.preferred_moose_id
 INNER JOIN preparation_types ON preparation_types.id = users.preferred_preparation_id
 WHERE users.id = 88

А потом я выкидываю запрос, в итоге получается что-то вроде этого:

+---diet---+-difficulty-+-id-+-id-+-id-+------name------+------name------+------name------+-preferred_moose_id-+-preferred_preparation_id-+-------size------+
| Dolphins |     9      | 88 | 88 | 88 | Liver Laddykin | Liver Laddykin | Liver Laddykin |         2          |             3            | Not as big      |
+----------+------------+----+----+----+----------------+----------------+----------------+--------------------+--------------------------+-----------------+

Обратите внимание, что данные перезаписываются / дублируются.Печень Ладдыкин не любит есть Печень Ладдыкин. Печень Ладдыкин, независимо от того, сложность 9 или нет.Это мера предосторожности, намеренно сделанная CF, и я могу понять, почему они так поступили.Однако должны быть способы избежать этого.Первым из которых будет использование оператора AS в запросе и ручное перечисление всех имен полей.НО

Снова, я повторюсь: я хочу избежать перечисления всех полей вручную и использования AS для каждого из них, поскольку это немного усложнит ситуацию, если это не сделать без перечисления полейи может быть применен либо Coldfusion, либо сделано MySQL.Если НЕТ решения, я в порядке, но я знаю, что я не эксперт по CF и , конечно, НЕ эксперт по MySQL.Пожалуйста, не стесняйтесь указывать на ошибки или что-то, что я пропускаю, даже если это кажется вам тривиальным.

ОБНОВЛЕНИЕ Спасибо пока комментаторам!К сожалению, изменение имен полей не является вариантом (хотя это определенно сработает).

Разъяснение фактического вопроса

То, что я ищу, так это то, что ColdFusion или MySQL могут дать мнеразные имена полей (и, следовательно, дифференцируемые) автоматически или программно, без необходимости вручную перечислять каждое из полей (даже пытаясь избежать использования cfloop, я знаю, что я делаю это сложно), и объявлять его с помощью AS.

Я думаю, что там может быть какой-то продвинутый SQL, о котором я не знаю.

1 Ответ

0 голосов
/ 22 марта 2011

Для ColdFusion имена ваших столбцов должны быть уникальными, обойти это невозможно.

Однако перечисление имен полей и использование AS для каждого не так уж и плохо.С помощью одного или двух быстрых циклов вы можете динамически генерировать SQL (не нужно явно что-то делать), и все будет готово!

...