Возможный дубликат:
Сочетание нескольких таблиц базы данных?
Я хочу, чтобы из двух таблиц базы данных выходили следующим образом:
Однонедельный тур по Стамбулу_1 | 88888 и 99999 $ 112233 $ 445566 | Три ночи и два дня | 15:29
Однонедельный тур по Стамбулу_2 | 55555 & 66666 $ 77777 | Три ночи и два дня | 12:03
Однонедельный тур по Стамбулу_3 | 11111 & 22222 $ 33333 $ 44444 | Три ночи и два дня | 12:03
Это мои таблицы:
Обновить:
он дает мне этот результат: http://img708.imageshack.us/img708/2404/outputnz.gif, но если я вложу $ find значение «55555», где вывод равен: http://img528.imageshack.us/ img528 / 3576 / outputnow.gif, но я хочу выйти: http://img832.imageshack.us/img832/120/outputwant.gif . Как оно?
$query = $this -> db -> query(' SELECT @rownum := @rownum + 1 rownum, tour_foreign.id, tour_foreign.name, MIN(tour_foreign_residence.name_re) AS name_re, tour_foreign.service, tour_foreign.date_go, tour_foreign.date_back, tour_foreign.term, tour_foreign.useradmin_submit, tour_foreign.date_submit, GROUP_CONCAT( tour_foreign_residence.name_re ORDER BY tour_foreign_residence.name_re SEPARATOR " $ " ) AS name_re_all FROM tour_foreign INNER JOIN tour_foreign_residence ON ( tour_foreign.id = tour_foreign_residence.relation ) JOIN (SELECT @rownum := 0) r WHERE tour_foreign.name LIKE "%' . $find . '%" OR tour_foreign_residence.name_re_all LIKE "%' . $find . '%" GROUP BY tour_foreign.id ');
Я получаю из выше sql следующую ошибку:
Ошибка базы данных Произошла
Номер ошибки: 1054Неизвестный столбец 'tour_foreign_residence.name_re_all' в 'where clause'
SELECT @rownum: = @rownum + 1 rownum, tour_foreign.id, tour_foreign.name, MIN (tour_foreign_residence.name_re) AS name_re, tour_foreign.service, tour_foreign.date_go, tour_foreign.date_back, tour_foreign.term, tour_foreign.useradmin_submit, tour_foreign. date_submit, GROUP_CONCAT (tour_foreign_residence.name_re ORDER BY tour_foreign_residence.name_re SEPARATOR "$") AS name_re_all FROM tour_foreign INNER JOIN tour_foreign_residence ON (tour_foreign.id = tour_foreign_residence.relation) JOIN (SELECT @rownum: = 0) r WHERE tour_foreign.name LIKE " %% "OR tour_foreign_residence.name_re_all LIKE" %% "GROUP BY tour_foreign.id
Имя файла: D: \ xampp \ htdocs \ system \ database \ DB_driver.php
Номер строки: 330
Вам нужно сгруппировать что-либо, или совокупность GROUP_CONCAT()
будет собирать все строки в одну:
GROUP BY tour_foreign.id
Использование:
$query = $this -> db -> query(' SELECT @rownum := @rownum + 1 rownum, tour_foreign.id, tour_foreign.name, MIN(tour_foreign_residence.name_re) AS name_re, tour_foreign.service, tour_foreign.date_go, tour_foreign.date_back, tour_foreign.term, tour_foreign.useradmin_submit, tour_foreign.date_submit, GROUP_CONCAT( tour_foreign_residence.name_re ORDER BY tour_foreign_residence.name_re SEPARATOR " $ " ) AS name_re_all FROM tour_foreign INNER JOIN tour_foreign_residence ON ( tour_foreign.id = tour_foreign_residence.relation ) JOIN (SELECT @rownum := 0) r WHERE tour_foreign.name LIKE "%' . $find . '%" OR tour_foreign_residence.name_re LIKE "%' . $find . '%" GROUP BY tour_foreign.id ');
Попробуйте добавить предложение GROUP BY
в конце инструкции SQL.
SELECT a.name, GROUP_CONCAT(b.name_re ORDER BY b.name_re SEPARATOR " & "), a.term, a.time_go FROM tour_foreign a INNER JOIN tour_foreign residence b ON a.id = b.relation GROUP BY a.name
Я просто изучаю SQL, поэтому я взял вашу проблему как упражнение. Надеюсь, что это работает.