Ошибка: используемые операторы SELECT имеют разное количество столбцов, как это исправить? - PullRequest
0 голосов
/ 18 октября 2011

Что является причиной этой ошибки? Как это можно исправить?

$find = 'hello';
$data = $this->db->query('SELECT * FROM tour_foreign_residence WHERE name LIKE "%' . $find . '%" UNION SELECT * FROM tour_foreign WHERE name LIKE "%' . $find . '%"');

Ошибка:

Произошла ошибка базы данных
Номер ошибки: 1222
Используется SELECT операторы имеют разное количество столбцов
SELECT * FROM tour_foreign_residence ГДЕ имя НРАВИТСЯ "% hello%" UNION SELECT * FROM tour_foreign ГДЕ имя НРАВИТСЯ "% hello%"
Имя файла: D: \ xampp \ htdocs \ system \ database \ DB_driver.php
Номер строки: 330

Ответы [ 4 ]

2 голосов
/ 18 октября 2011

Существует два основных правила использования оператора UNION:

  1. Количество и порядок извлечения столбцов должны быть одинаковыми в запросах объединения
  2. Тип данных в соответствующих столбцах должен быть совместимым

В вашем случае первое правило игнорируется.используйте оператор join вместо

1 голос
/ 18 октября 2011

Вы уверены, что вам нужен UNION ?

UNION требует, чтобы все объединяемые запросы имели одинаковое количество столбцов в предложении SELECT, поэтому вы не должны использовать *, но явно напишите поля, которые вам нужно запросить.Кроме того, столбцы должны иметь одинаковый тип данных.

0 голосов
/ 18 октября 2011

Согласно статье w3schools об операторе UNION :

Каждый оператор SELECT в UNION должен иметь одинаковый Число столбцов. Столбцы также должны иметь похожие типы данных. Кроме того, столбцы в каждом операторе SELECT должны быть в том же порядке.

0 голосов
/ 18 октября 2011

Не используйте SELECT * в вашем запросе. Вместо этого запишите фактические имена столбцов, которые вы хотите получить из базы данных. Имена столбцов должны быть одинаковыми в обеих таблицах. В настоящее время у вас есть UNION, и похоже, что таблицы tour_foreign_residence и tour_foreign имеют разные столбцы.

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