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 |
+---------+----------+------------+-------------------------+------------+
02. 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.