Как выбрать данные из MySQL, используя предложение where столбца из другой таблицы - PullRequest
0 голосов
/ 08 января 2019

В моей базе данных есть две таблицы: tkt_booking и trip_assign. Мне нужно получить данные, которые объединяют эти две таблицы, используя выражение where из второй таблицы (trip_assign). Это мои столы

CREATE TABLE `tkt_booking` (
  `id` int(11) UNSIGNED NOT NULL,
  `id_no` varchar(20) DEFAULT NULL,
  `trip_id_no` int(11) UNSIGNED DEFAULT NULL,
  `tkt_passenger_id_no` varchar(20) DEFAULT NULL,
  `trip_route_id` int(11) DEFAULT NULL,
  `pickup_trip_location` varchar(50) DEFAULT NULL,
  `drop_trip_location` varchar(50) DEFAULT NULL,
  `price` float DEFAULT NULL,
  `total_seat` int(11) DEFAULT NULL,
  `seat_numbers` varchar(255) DEFAULT NULL,
  `tkt_refund_id` int(11) DEFAULT NULL,
  `agent_id` int(11) DEFAULT NULL,
  `booking_date` datetime DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `booking_type` varchar(20) DEFAULT NULL,
  `payment_status` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `trip_assign` (
  `id` int(11) UNSIGNED NOT NULL,
  `id_no` varchar(20) DEFAULT NULL,
  `fleet_registration_id` int(11) DEFAULT NULL,
  `trip_route_id` int(11) DEFAULT NULL,
  `start_date` date DEFAULT NULL,
  `end_date` time DEFAULT NULL,
  `reporting` time DEFAULT NULL,
  `sold_ticket` float NOT NULL DEFAULT '0',
  `total_income` float DEFAULT '0',
  `total_expense` float DEFAULT '0',
  `total_fuel` float DEFAULT '0',
  `trip_comment` text,
  `closed_by_id` int(11) DEFAULT '0',
  `date` datetime DEFAULT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `tkt_booking`
  ADD CONSTRAINT `FK_tkt_booking_trip_assign` FOREIGN KEY (`trip_id_no`) REFERENCES `trip_assign` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Из приведенных выше двух таблиц мне нужно объединить эти таблицы и получить данные, используя предложение where, по trip_assign.start_date.

Вот мой запрос codeigniter

public function read($data= array())
    {
        $start_date = date('Y-m-d', strtotime($data->start_date));
        $end_date   = date('Y-m-d', strtotime($data->end_date));


        $this->db->select("
                tb.*, 
                tr.name AS route_name,
                ta.start_date AS start_date,
                fr.reg_no AS bus_number,
                a.agent_id AS agent_id,
                tp.phone AS phone,
                CONCAT_WS(' ', a.agent_first_name, a.agent_last_name) AS agent_name,
                CONCAT_WS(' ', tp.firstname, tp.lastname) AS pass_name
            ")
            ->from("tkt_booking AS tb")
            ->join("trip_route AS tr", "tr.id = tb.trip_route_id", "left") 
            ->join("trip_assign AS ta", "ta.id_no = tb.trip_id_no", "left")
            ->join("fleet_registration AS fr", "fr.id = ta.fleet_registration_id", "left") 
            ->join("tkt_passenger AS tp", "tp.id_no = tb.tkt_passenger_id_no", "left") 
            ->join("agent AS a", "a.agent_id = tb.agent_id", "left") 
            ->group_start()
                ->where("tb.tkt_refund_id IS NULL", null, false)
                ->or_where("tb.tkt_refund_id", 0)
                ->or_where("tb.tkt_refund_id", null)
            ->group_end();

        switch ($data->filter) 
        {
            case 'trip':
                $this->db->where('tb.trip_id_no', $data->trip);
                break; 
            case 'bus':
                $this->db->where('fr.reg_no', $data->bus);
                break; 
            case 'agent':
                $this->db->where('a.agent_first_name', $data->agent);
                break; 
        } 
        $this->db->where("DATE(ta.start_date) BETWEEN '$start_date' AND '$end_date'", null, false);


        return $this->db->limit($data->limit, $data->offset)
            ->order_by('ta.start_date', 'desc')
            ->get()
            ->result(); 
    } 

Из вышеприведенного запроса я не получаю никакого результата, когда использую ta.start_date в предложении where, но я получаю результат только с использованием tb.date. Мне нужна помощь

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