После объединения трех таблиц sql в codeigniter, не могу найти нужный идентификатор - PullRequest
2 голосов
/ 23 апреля 2019

Не могу найти нужный Id

Я объединяю три таблицы SQL в CodeIgniter.Я могу получить данные из трех таблиц.Но я сталкиваюсь с проблемой в поиске правильного идентификатора.

Я поставил три таблицы ниже:

таблица книг:

CREATE TABLE `books` (
  `id` int(11) NOT NULL,
  `book_name` varchar(200) NOT NULL,
  `description` text NOT NULL,
  `author` varchar(200) NOT NULL,
  `publisher` varchar(200) NOT NULL,
  `price` varchar(200) NOT NULL,
  `quantity` int(11) NOT NULL,
  `categoryId` int(11) NOT NULL,
  `book_image` varchar(200) NOT NULL,
  `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `userId` int(11) NOT NULL,
  `status` enum('1','0') NOT NULL DEFAULT '0' COMMENT '1 = published | 0 = unpublished'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

таблица категорий:

    CREATE TABLE `category` (
      `id` int(11) NOT NULL,
      `category` varchar(100) NOT NULL,
      `description` text NOT NULL,
      `tag` varchar(100) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

таблица пользователей:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `contact` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `address` varchar(500) NOT NULL,
  `city` varchar(50) NOT NULL,
  `type` varchar(20) NOT NULL DEFAULT 'U',
  `createdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Моя модель:

public function get_books($limit, $offset)
{   
    /*=== SQL join ===*/
    $this->db->select('*');
    $this->db->from('category');
    $this->db->join('books', 'books.categoryId = category.id');
    $this->db->join('users', 'books.userId = users.id'); #...Join three sql table

    $this->db->order_by('books.id', 'DESC');
    $this->db->where('books.status', '1');
    $this->db->limit($limit, $offset);
    $query = $this->db->get();
    return $query->result();
}

Теперь я получаю идентификатор пользователя в моей объединенной таблице. Но я хочу, чтобы в качестве основного идентификатора использовался идентификатор книги. Как мне решить эту проблему?

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

ниже, я просто выбираю все столбцы из таблицы книг.Я также сделал книги главным столом вместо таблицы категорий

public function get_books($limit, $offset)
{   
    /*=== SQL join ===*/
    $this->db->select('books.*');
    $this->db->from('books');
    $this->db->join('category', 'books.categoryId = category.id');
    $this->db->join('users', 'books.userId = users.id'); #...Join three sql table

    $this->db->order_by('books.id', 'DESC');
    $this->db->where('books.status', '1');
    $this->db->limit($limit, $offset);
    $query = $this->db->get();
    return $query->result();
}
1 голос
/ 23 апреля 2019

Как и предыдущий ответ , вы не должны использовать '*' this.Вы должны написать запрос на выборку вручную, выбрать любой столбец из таблиц.

Чтобы получить идентификатор книги в качестве желаемого идентификатора, вы должны изменить код модели, как показано ниже.

Код модели

public function get_books($limit, $offset)
{   
    $this->db->select('books.id, books.book_name, books.description, books.author, books.book_image, books.otherCol, category.category, users.name'); // You can add many more if you want.

    $this->db->from('books');
    $this->db->join('category', 'books.categoryId = category.id'); //2nd join
    $this->db->join('users', 'books.userId = users.id'); //3rd join

    $this->db->order_by('books.id', 'DESC');
    $this->db->where('books.status', '1');
    $this->db->limit($limit, $offset);
    $query = $this->db->get();
    return $query->result();
}

Думаю, теперь вы получите желаемый id из таблицы books .

1 голос
/ 23 апреля 2019

Не используйте select * в своем запросе. Укажите, какие столбцы вы хотите, по их именам таблиц или псевдонимам таблиц, поскольку у вас есть 3 таблицы, объединенные и у всех есть столбец идентификатора, он не знает, из какого столбца идентификатора вы хотите получитьрезультат вашего запроса,

$this->db->select('books.id, books.status, users.someData, etc.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...