2015-07-14 13 views
5

Tôi có hai bảng trong cơ sở dữ liệu mySQL của tôi:Làm cách nào để kết nối giá trị của một bảng mySQL với giá trị của một bảng khác?

bảng "động vật":

| animal | name  | 
|:-----------|------------:| 
| cat  |  Tom  | 
| dog  |    | 

bảng "đơn đặt hàng":

|  id  | animal | 
|:-----------|------------:| 
|  1  |  cat  | 
|  2  |  dog  | 

Lúc đầu, tôi chọn từ "đơn đặt hàng" bàn dữ liệu sau:

<?php 
    $pdo = Database::connect(); 
    $sql = 'SELECT * FROM orders ORDER BY id ASC'; 
    foreach ($pdo->query($sql) as $row) { 

    echo ('<td>a:'.$row['id'].'</td>');  
    echo ('<td>b:'.$row['animal'].'</td>'); 
    echo ('<td>c:'.$row['animal'].'</td>');   

    } 
    Database::disconnect(); 
    ?> 

Bây giờ tôi muốn kiểm tra xem trong bảng mySQL của tôi "ani mal "the animaltên. Nếu có in tại vị trí btên. Nếu có no name in các động vật:

|  a:1  |  b:Tom  |  c:cat  | 
|  a:2  |  b:dog  |  c:dog  | 

Cảm ơn bạn đã trả lời của bạn! Tôi đã cố gắng làm việc ngay bây giờ với câu trả lời là Jayo2k. Tôi cần phải làm một chút thay đổi trong câu hỏi của mình, tôi phát hiện ra mình đã làm một sai lầm nhỏ. Vì vậy, ở đây tôi cố gắng mô tả những gì tôi cần càng cụ thể càng tốt:

bảng "động vật":

| name  | animal | 
|:-----------|------------:| 
| Tom  |  cat  | 
| Jerry |  dog  | 
| Alfred | duck  | 
| Sam  |    | 
| Donald |    | 

bảng "đơn đặt hàng":

|  id  | animal | 
|:-----------|------------:| 
|  1  |  cat  | 
|  2  |  dog  | 
|  3  |  duck | 
|  4  |  frog | 
|  5  |  pig  | 

Với đoạn mã sau từ Jayo2k ...

<?php 
    $pdo = Database::connect(); 
    $sql = "SELECT * FROM animals, orders WHERE orders.animal = animals.animal"; 
    foreach ($pdo->query($sql) as $row) { 

    echo '<tr> '; 
    echo('<td>a:'.$row['id'].' </td>'); 
    echo('<td>a:'.$row['animal'].' </td>'); 
    echo('<td>b:'.$row['name'].' </td>'); 
    echo '</tr> '; 

    } 
    Database::disconnect(); 
    ?>  

... Tôi nhận được kết quả này:

|  a:1  |  b:cat  |  c:Tom  | 
|  a:2  |  b:dog  |  c:Jerry | 
|  a:3  |  b:duck |  c:Alfred | 

Nhưng những gì tôi cần là:

|  a:1  |  b:cat  |  c:Tom  | 
|  a:2  |  b:dog  |  c:Jerry | 
|  a:3  |  b:duck |  c:Alfred | 
|  a:4  |  b:frog |  c:frog | 
|  a:5  |  b:pig  |  c:pig  | 

Trả lời

5

Bạn có thể sử dụng LEFT JOIN, và sử dụng các điều kiện IF để kiểm tra giá trị không trống rỗng, cùng với IFNULL, mà sẽ làm cho giá trị null trong cột để chỗ trống.

SELECT O.id, IF(IFNULL(A.name, '') = '', A.animal, A.name) name, A.animal 
FROM orders O 
LEFT JOIN animals A 
    ON O.animal = A.animal 
ORDER BY O.id DESC 
+0

@JayBlanchard Đó có ý nghĩa !!sẽ ghi nhớ trước :) - Cảm ơn bạn –

+1

Đây là câu trả lời hoàn hảo! – Jarla

0

Những gì tôi làm là (Tôi đang sử dụng PDO):

SELECT * FROM animal, orders WHERE orders.animal = animals.animal 

Nó sẽ chọn cả hai con vật và bảng đơn đặt hàng và doanh hàng động vật từ đơn đặt hàng với hàng động vật từ động vật.

bạn sẽ nhận được một mảng như thế này

[0] => 
     id = 1 
     name = tom 
     animal = cat 
[1] => 
     id = 2 
     name = 
     animal = dog 

Bây giờ tùy thuộc vào bạn để làm tất cả những thay đổi mà bạn muốn

+0

Cảm ơn bạn rất nhiều! Tôi đã phải thực hiện một chút sửa đổi trong câu hỏi của tôi nhưng tôi đã cố gắng để làm việc với mã gợi ý của bạn. Tôi đã chỉnh sửa câu hỏi của tôi ở trên để giải thích cho bạn vấn đề của tôi – Jarla

Các vấn đề liên quan