Есть ли другие возможности для решения этой проблемы в MySQL - PullRequest
1 голос
/ 10 марта 2011

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

У меня есть более пяти общих полей в этих 3 таблицах.при выполнении запроса общие поля перезаписываются.

Есть ли способ получить все значения из таблицы 3 без перезаписи, а также без указания псевдонима для этих общих полей?

[Обновление: согласно последнему комментарию, ОП спрашивает, как получить такие столбцы, используя CodeIgniter]

Ответы [ 3 ]

2 голосов
/ 10 марта 2011
mysql> CREATE TABLE reservation (
    ->  id INT,
    ->  data VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.42 sec)

mysql> CREATE TABLE booking (
    ->  id INT,
    ->  data VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> CREATE TABLE billing (
    ->  id INT,
    ->  data VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO reservation (id, data) VALUES (1, 'Lorem ipsum'), (2, 'Dolor sit amet');
Query OK, 2 rows affected (0.05 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> INSERT INTO booking (id, data) VALUES (1, 'Consectetur adipisicing'), (2, 'Consectetur adipisicing');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> INSERT INTO billing (id, data) VALUES (1, 'Tempor incididunt'), (2, 'Ut labore');
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql>
mysql> SELECT *
    -> FROM reservation
    -> LEFT JOIN booking ON reservation.id=booking.id
    -> LEFT JOIN billing ON booking.id=billing.id;
+------+----------------+------+-------------------------+------+-------------------+
| id   | data           | id   | data                    | id   | data              |
+------+----------------+------+-------------------------+------+-------------------+
|    1 | Lorem ipsum    |    1 | Consectetur adipisicing |    1 | Tempor incididunt |
|    2 | Dolor sit amet |    2 | Consectetur adipisicing |    2 | Ut labore         |
+------+----------------+------+-------------------------+------+-------------------+
2 rows in set (0.00 sec)

Обновление

ОП теперь спрашивает, как это сделать в PHP-среде CodeIgniter, которую я никогда не использовал. Все, что я могу предоставить, это общий совет по PHP. Большинство библиотек БД предоставляют методы для извлечения результатов запроса как числовых массивов, так и ассоциативных массивов. Если есть повторяющиеся имена столбцов, вы должны избегать второго и придерживаться числовых массивов. Например, вместо этого:

while($row = $res->fetch(PDO::FETCH_ASSOC)){
}

... вы должны сделать это:

while($row = $res->fetch(PDO::FETCH_NUM)){
}
0 голосов
/ 10 марта 2011

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

Но вам действительно нужно выбрать один и тот же столбец три раза? Вы не можете просто выбрать данные из одного столбца. А потом, когда вы хотите обновить, вы делаете три обновления?

Редактировать: Я читаю «общие поля», как будто одни и те же данные реплицируются в нескольких таблицах, возможно, вы только заметили, что имена столбцов совпадают?

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...