Hướng dẫn how to fetch data from 3 tables in php - cách lấy dữ liệu từ 3 bảng trong php

Tôi nghĩ rằng bạn có vấn đề với cấu trúc dữ liệu của bạn. Đầu tiên mỗi bảng chắc chắn nên có cột ID riêng [khóa chính - tìm hiểu một chút về điều đó].

Điều thứ hai là với cấu trúc dữ liệu của bạn, bạn sẽ gặp vấn đề với người gửi tin nhắn và người nhận được tin nhắn đó nếu bạn sẽ có nhiều hơn hai người dùng. Bạn đã trả lời cột [Y/N] trong bảng tin nhắn nhưng từ cấu trúc bảng này không thể kết nối một tin nhắn với tin nhắn mà bạn [hoặc ai đó] đã trả lời. Ngoài ra không cần ghi chú bảng [Tôi không nhận được chức năng đó], bảng đó trong cấu trúc dữ liệu như thế này không có nhiều ý nghĩa, bạn chỉ cần thêm một cột trong thông báo bảng được gọi là ghi chú và điều đó sẽ thực hiện công việc cho bạn ...

Dưới đây là một ví dụ đơn giản, dữ liệu của bạn có thể trông như thế nào:

Bảng: Mọi người

+---------+----------+------------+
|peopleID |  Name    |    Age     |
+---------+----------+------------+
| 123qwe  | Tom      |    23      |
+---------+----------+------------+ 
| 456rty  | Andy     |    35      |
+---------+----------+------------+

Bảng: Tin nhắn

+---------+----------+------------+-------------------------+------------+
|messageID| peopleID | messages   |          note           | replied    |
+---------+----------+------------+-------------------------+------------+
|   1     | 123qwe   | Hi         | I have problem with this|    0       |
+---------+----------+------------+-------------------------+------------+
|   3     | 123qwe   | Hello      | oh no                   |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   4     | 456rty   | Hi         | yeah                    |    3       | 
+---------+----------+------------+-------------------------+------------+ 
|   5     | 123qwe   | hi         | boring                  |    4       | 
+---------+----------+------------+-------------------------+------------+ 
|   7     | 456rty   | pfff       | what's new              |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   9     | 123qwe   | Hi         | nothing, I'm bored      |    7       | 
+---------+----------+------------+-------------------------+------------+ 
|   10    | 456rty   | pf         | me to                   |    9       | 
+---------+----------+------------+-------------------------+------------+ 

Vì vậy, ở đây thay vì chỉ có giá trị Y/N trong cột được trả lời, bạn sẽ có trong giá trị cột của MessageID trên đó là câu trả lời của cột. Ngoài ra, nếu có giá trị 0 trong cột đó có nghĩa là tin nhắn đầu tiên trong cuộc trò chuyện.

Truy vấn của bạn có thể chọn tin nhắn đã được trả lời có thể trông như thế này

-- SELECT MESSAGE WHICH HAVE BEEN ANSWERED
SELECT m.messageID, p.name, p.age, m.messages, m.note
FROM people p
INNER JOIN message m
ON p.peopleID = m.peopleID
WHERE m.messageID IN [SELECT replied
                      FROM message
                      GROUP BY replied];

-- SELECT MESSAGE WHICH    NOT   HAVE BEEN ANSWERED
SELECT m.messageID, p.name, p.age, m.messages, m.note
FROM people p
INNER JOIN message m
ON p.peopleID = m.peopleID
WHERE m.messageID NOT IN [SELECT replied
                          FROM message
                          GROUP BY replied];

Đây là sql fiddle để bạn có thể thấy nó hoạt động như thế nào ...

Công việc đó như thế này nếu bạn muốn xem tin nhắn mà bạn nhận được câu trả lời chỉ đơn giản là bạn kiểm tra xem có tin nhắn đó trong cột được trả lời không, nếu có MessageId trong cột được trả lời có nghĩa là tin nhắn có câu trả lời, nếu không có nghĩa là tin nhắn không ' T nhận câu trả lời ...

Hy vọng điều này không làm bạn bối rối nhiều ...

GL!

P.S. Nếu bạn cần ghi chú bảng thứ ba đó vì một số lý do hơn là bạn có thể chỉ cần thêm nó vào truy vấn với một lần tham gia bên trong như bạn đã làm trong truy vấn của bạn.

Nếu bạn muốn tải dữ liệu từ nhiều bảng thì tại thời điểm đó, bạn có thể sử dụng từ khóa tham gia bên trong và hợp nhất hai bảng hoặc nhiều bảng với cột chung giữa hai hoặc nhiều bảng. Ở đây tôi đã sử dụng hai thương hiệu và sản phẩm. Bảng thương hiệu có hai cột Brand_id và Brand_name, Brand_id là khóa chính.


Xem xét theo hai bảng.

1: TBL_C CAGETORIES


CREATE TABLE IF NOT EXISTS `tbl_categories` [
  `cat_id` int[5] NOT NULL AUTO_INCREMENT,
  `cat_name` varchar[20] NOT NULL,
  PRIMARY KEY [`cat_id`]
] ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

Hồ sơ cho bảng này:


INSERT INTO `tbl_categories` [`cat_id`, `cat_name`] VALUES
[1, 'samsung'],
[2, 'nokia'],
[3, 'htc'];

2: tbl_products


CREATE TABLE IF NOT EXISTS `tbl_products` [
  `product_id` int[5] NOT NULL AUTO_INCREMENT,
  `product_name` varchar[30] NOT NULL,
  `cat_id` int[5] NOT NULL,
  PRIMARY KEY [`product_id`]
] ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

Hồ sơ cho bảng này:


INSERT INTO `tbl_products` [`product_id`, `product_name`, `cat_id`] VALUES
[1, 'galaxy note', 1],
[3, 'lumia 530', 2],
[5, 'htc grid', 3];

2: tbl_products
- Now suppose you want to retrieve details from products table along with product category.
- You can do so using the following two methods.
1. Referencing two tables in single SQL statement.
2. Using JOIN statements.

- Trong hai bảng trên, có một cột chung [trường] có tên là 'cat_id' dựa trên đó bạn có thể thiết lập mối quan hệ giữa hai bảng này. - Bây giờ giả sử bạn muốn truy xuất chi tiết từ bảng sản phẩm cùng với danh mục sản phẩm. - Bạn có thể làm như vậy bằng cách sử dụng hai phương pháp sau. 1. Tham chiếu hai bảng trong câu lệnh SQL đơn. 2. Sử dụng các câu lệnh tham gia.

1. Câu lệnh SQL đơn

Để truy xuất thông tin từ hai bảng liên quan, bạn cần tham khảo hai bảng trong truy vấn SQL của mình.

Không tham gia cú pháp chung


SELECT tbl_a.column1 , tbl_a.column2 
       tbl_b.column1 , tbl_b.column2
FROM   tbl_a , tbl_b
WHERE  tbl_a.commonfield=tbl_b.commonfield

:

Example.

index.php





Using single SQL

table,td,th
{
 padding:10px;
 border-collapse:collapse;
 font-family:Georgia, "Times New Roman", Times, serif;
 border:solid #ddd 2px;
}




product id
product name
category name


    
    
    
    
    
    

- Trong cú pháp trên, nơi điều kiện thiết lập mối quan hệ giữa các bảng dựa trên trường chung.


SELECT c . * , p . *
FROM tbl_categories c, tbl_products p
WHERE c.cat_id = p.cat_id

Trong ví dụ trên truy vấn được sử dụng như sau:
c = tbl_categories
p = tbl_products
* = fetch all records from both tables.
1. c and p is the alias name of these two tables.
2. Both table should have common column, first is primary and second is foreign key.
3. 'cat_id' is primary key in categories table.
4. 'cat_id' is foreign key in products table.

Đầu ra: & nbsp;


2. Sử dụng tham gia

-Trong các tham gia MySQL cho phép truy xuất các bản ghi dữ liệu từ một hoặc nhiều bảng có cùng mối quan hệ giữa chúng, bạn cũng có thể sử dụng toán tử logic để lấy đầu ra mong muốn từ các truy vấn tham gia MySQL.1. Tham gia bên trong - Đó là một loại tham gia mặc định. - Khi hai bảng được nối bằng tùy chọn tham gia bên trong, nó chỉ trả về các bản ghi đó từ cả hai bảng hoặc tồn tại một mục cho trường chung. Ví dụ:
1. Inner JOIN
- it is a default join type.
- when two tables are joined using INNER JOIN option it returns only those records from both tables or which there exist an entry for common field.
example :

+---------+----------+------------+-------------------------+------------+
|messageID| peopleID | messages   |          note           | replied    |
+---------+----------+------------+-------------------------+------------+
|   1     | 123qwe   | Hi         | I have problem with this|    0       |
+---------+----------+------------+-------------------------+------------+
|   3     | 123qwe   | Hello      | oh no                   |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   4     | 456rty   | Hi         | yeah                    |    3       | 
+---------+----------+------------+-------------------------+------------+ 
|   5     | 123qwe   | hi         | boring                  |    4       | 
+---------+----------+------------+-------------------------+------------+ 
|   7     | 456rty   | pfff       | what's new              |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   9     | 123qwe   | Hi         | nothing, I'm bored      |    7       | 
+---------+----------+------------+-------------------------+------------+ 
|   10    | 456rty   | pf         | me to                   |    9       | 
+---------+----------+------------+-------------------------+------------+ 
0

2. Tham gia bên ngoài

Cú pháp:
+---------+----------+------------+-------------------------+------------+
|messageID| peopleID | messages   |          note           | replied    |
+---------+----------+------------+-------------------------+------------+
|   1     | 123qwe   | Hi         | I have problem with this|    0       |
+---------+----------+------------+-------------------------+------------+
|   3     | 123qwe   | Hello      | oh no                   |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   4     | 456rty   | Hi         | yeah                    |    3       | 
+---------+----------+------------+-------------------------+------------+ 
|   5     | 123qwe   | hi         | boring                  |    4       | 
+---------+----------+------------+-------------------------+------------+ 
|   7     | 456rty   | pfff       | what's new              |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   9     | 123qwe   | Hi         | nothing, I'm bored      |    7       | 
+---------+----------+------------+-------------------------+------------+ 
|   10    | 456rty   | pf         | me to                   |    9       | 
+---------+----------+------------+-------------------------+------------+ 
1
+---------+----------+------------+-------------------------+------------+
|messageID| peopleID | messages   |          note           | replied    |
+---------+----------+------------+-------------------------+------------+
|   1     | 123qwe   | Hi         | I have problem with this|    0       |
+---------+----------+------------+-------------------------+------------+
|   3     | 123qwe   | Hello      | oh no                   |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   4     | 456rty   | Hi         | yeah                    |    3       | 
+---------+----------+------------+-------------------------+------------+ 
|   5     | 123qwe   | hi         | boring                  |    4       | 
+---------+----------+------------+-------------------------+------------+ 
|   7     | 456rty   | pfff       | what's new              |    0       | 
+---------+----------+------------+-------------------------+------------+   
|   9     | 123qwe   | Hi         | nothing, I'm bored      |    7       | 
+---------+----------+------------+-------------------------+------------+ 
|   10    | 456rty   | pf         | me to                   |    9       | 
+---------+----------+------------+-------------------------+------------+ 
1

Đó là nó ... Tôi hy vọng bài đăng này hữu ích cho bạn ... Tải xuống tập lệnh này từ liên kết đã cho.
I hope this post is helpful to you...
Download this Script from the given link.


Làm thế nào tôi có thể lấy dữ liệu từ 3 bảng?

Để làm như vậy, chúng tôi cần sử dụng Truy vấn tham gia để lấy dữ liệu từ nhiều bảng ...
Chọn p. P_ID, p. cus_id, p. P_NAME, C1. Tên1, C2. Tên2 ..
Từ sản phẩm như p ..
Để lại tham gia Khách hàng1 là C1 ..
Trên P. Cus_id = C1. cus_id ..
Để lại tham gia Khách hàng2 dưới dạng C2 ..
Trên P. Cus_id = C2. cus_id ..

Làm thế nào để tìm nạp dữ liệu từ 2 bảng trong PHP?

Từ khóa tham gia bên phải được sử dụng để trả về tất cả các bản ghi từ bảng bên phải [Bảng 2] và các bản ghi phù hợp từ bảng bên trái [Bảng 1].Cú pháp: Chọn Cột1, Cột2, ... Cột từ Bảng 1 Tham gia bên phải Bảng2 trên Bảng1.SELECT column1,column2,... columnn FROM table1 RIGHT JOIN table2 ON table1.

Làm cách nào để lấy dữ liệu từ hai bảng trong một truy vấn?

Trong SQL, để tìm nạp dữ liệu từ nhiều bảng, toán tử tham gia được sử dụng.Toán tử tham gia thêm hoặc xóa các hàng trong bảng ảo được SQL Server sử dụng để xử lý dữ liệu trước các bước khác của truy vấn tiêu thụ dữ liệu.the join operator is used. The join operator adds or removes rows in the virtual table that is used by SQL server to process data before the other steps of the query consume the data.

Làm thế nào tôi có thể tham gia nhiều hơn hai bảng trong PHP?

Nếu bạn muốn tải dữ liệu từ nhiều bảng thì tại thời điểm đó, bạn có thể sử dụng từ khóa tham gia bên trong và hợp nhất hai bảng hoặc nhiều bảng với cột chung giữa hai hoặc nhiều bảng.Ở đây tôi đã sử dụng hai thương hiệu và sản phẩm.Bảng thương hiệu có hai cột Brand_id và Brand_name, Brand_id là khóa chính.use inner join keyword and merge two table or more table with common column between two or more table. Here I have use two table brand and product. Brand table has two column brand_id and brand_name, brand_id is a primary key.

Bài Viết Liên Quan

Chủ Đề