Hướng dẫn select multiple table php - chọn nhiều bảng php

Những gì bạn làm ở đây được gọi là JOIN [mặc dù bạn làm điều đó hoàn toàn vì bạn chọn từ nhiều bảng]. Điều này có nghĩa là, nếu bạn không đặt bất kỳ điều kiện nào trong mệnh đề nơi của bạn, bạn có tất cả các kết hợp của các bảng đó. Chỉ với điều kiện của bạn, bạn hạn chế tham gia với những hàng mà ID đồ uống phù hợp.

Nhưng vẫn còn nhiều hàng X trong kết quả cho mỗi đồ uống, nếu có x ảnh với đồ uống đặc biệt này. Tuyên bố của bạn không hạn chế [các] bức ảnh bạn muốn có!

Nếu bạn chỉ muốn một hàng mỗi lần uống, bạn phải nói với SQL những gì bạn muốn làm nếu có nhiều hàng với một loại đồ uống cụ thể_id. Đối với điều này, bạn cần nhóm và một chức năng tổng hợp. Bạn nói với SQL mục nào bạn muốn nhóm lại với nhau [ví dụ: tất cả các loại đồ uống bằng nhau] và trong lựa chọn, bạn phải biết mục nào khác nhau cho mỗi hàng kết quả được nhóm nên được thực hiện. Đối với các số, đây có thể là trung bình, tối thiểu, tối đa [để đặt tên cho một số].

Trong trường hợp của bạn, tôi không thể thấy cảm giác để truy vấn các bức ảnh cho đồ uống nếu bạn chỉ muốn một hàng. Bạn có thể nghĩ rằng bạn có thể có một loạt các bức ảnh trong kết quả của bạn cho mỗi đồ uống, nhưng SQL không thể làm điều này. Nếu bạn chỉ muốn bất kỳ bức ảnh nào và bạn không quan tâm đến việc bạn sẽ nhận được, chỉ cần nhóm theo đồ uống_id [để chỉ nhận được một hàng mỗi lần uống]:

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id
name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg

Trong MySQL, chúng tôi cũng có nhóm_concat, nếu bạn muốn tên tệp được nối với một chuỗi duy nhất:

SELECT name, price, GROUP_CONCAT[photo, ',']
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id
name     price   photo
fanta    5       ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew      4       ./images/dew-1.jpg,./images/dew-2.jpg

Tuy nhiên, điều này có thể trở nên nguy hiểm nếu bạn có , trong các giá trị trường, vì rất có thể bạn muốn chia điều này một lần nữa ở phía máy khách. Nó cũng không phải là một hàm tổng hợp SQL tiêu chuẩn.

4.4.9 & nbsp; sử dụng nhiều hơn một bảng

Bảng

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg
0 theo dõi những vật nuôi bạn có. Nếu bạn muốn ghi lại thông tin khác về họ, chẳng hạn như các sự kiện trong cuộc sống của họ như thăm bác sĩ thú y hoặc khi lứa được sinh ra, bạn cần một bảng khác. Bảng này nên trông như thế nào? Nó cần phải chứa các thông tin sau:

  • Tên thú cưng để bạn biết mỗi sự kiện này liên quan đến con vật nào.

  • Một ngày để bạn biết khi nào sự kiện xảy ra.

  • Một lĩnh vực để mô tả sự kiện.

  • Một trường loại sự kiện, nếu bạn muốn có thể phân loại các sự kiện.

Với những cân nhắc, câu lệnh

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg
1 cho bảng
name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg
2 có thể trông như thế này:

mysql> CREATE TABLE event [name VARCHAR[20], date DATE,
       type VARCHAR[15], remark VARCHAR[255]];

Như với bảng

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg
0, dễ nhất tải các bản ghi ban đầu bằng cách tạo tệp văn bản được chọn theo tab chứa thông tin sau.

Tênngàyloại hìnhnhận xétMịnBuffyBuffyBuffy3 con chó con, 3 nữ3 con chó con, 3 nữbác sĩ thú ybác sĩ thú yxương sườn bị gãyxương sườn bị gãy
1995-05-15lít4 chú mèo con, 3 nữ, 1 nam
1993-06-23lít4 chú mèo con, 3 nữ, 1 nam
1993-06-23lít4 chú mèo con, 3 nữ, 1 nam
1993-06-235 con chó con, 2 nữ, 3 nam1994-06-19
Chirpy5 con chó con, 2 nữ, 3 nam1994-06-19
Chirpy1999-03-21
Chirpy1999-03-21
cần thiết mỏ thẳngMảnh mai1997-08-03
BowserMảnh mai1997-08-03
BowserMảnh mai1997-08-03

xương sườn bị gãy

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

Bowser

1991-10-12

mysql> SELECT pet.name,
       TIMESTAMPDIFF[YEAR,birth,date] AS age,
       remark
       FROM pet INNER JOIN event
         ON pet.name = event.name
       WHERE event.type = 'litter';
+--------+------+-----------------------------+
| name   | age  | remark                      |
+--------+------+-----------------------------+
| Fluffy |    2 | 4 kittens, 3 female, 1 male |
| Buffy  |    4 | 5 puppies, 2 female, 3 male |
| Buffy  |    5 | 3 puppies, 3 female         |
+--------+------+-----------------------------+

cũi

  • Răng nanh

  • 1998-08-28

    ngày sinh nhật

  • Đã cho anh ấy một món đồ chơi nhai mới

Bạn không cần phải có hai bảng khác nhau để thực hiện tham gia.Đôi khi rất hữu ích khi tham gia một bảng với chính nó, nếu bạn muốn so sánh các bản ghi trong một bảng với các bản ghi khác trong cùng một bảng đó.Ví dụ: để tìm các cặp sinh sản giữa các vật nuôi của bạn, bạn có thể tham gia bảng

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg
0 để tạo ra các cặp ứng cử viên của con đực và con cái giống như các loài:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
       FROM pet AS p1 INNER JOIN pet AS p2
         ON p1.species = p2.species
         AND p1.sex = 'f' AND p1.death IS NULL
         AND p2.sex = 'm' AND p2.death IS NULL;
+--------+------+-------+------+---------+
| name   | sex  | name  | sex  | species |
+--------+------+-------+------+---------+
| Fluffy | f    | Claws | m    | cat     |
| Buffy  | f    | Fang  | m    | dog     |
+--------+------+-------+------+---------+

Trong truy vấn này, chúng tôi chỉ định các bí danh cho tên bảng để tham khảo các cột và giữ thẳng thể hiện của bảng mỗi tham chiếu cột được liên kết với.

Chủ Đề