我的mySQL数据库中有两个表:
表&#34>动物":| animal | name |
|:-----------|------------:|
| cat | Tom |
| dog | |
表"订单":
| id | animal |
|:-----------|------------:|
| 1 | cat |
| 2 | dog |
首先,我从表格中选择"订单"以下数据:
<?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();
?>
现在我想检查一下我的mySQL表格&#34; animal&#34; 动物的名称。如果是,则在位置 b 打印名称。如果无名称打印动物:
| a:1 | b:Tom | c:cat |
| a:2 | b:dog | c:dog |
感谢您的回答!我现在尝试使用 Jayo2k 的答案。我需要在我的问题上做一点改变,我发现我犯了一点错误。所以在这里我尝试尽可能具体地描述我需要的东西:
表&#34>动物&#34;:| name | animal |
|:-----------|------------:|
| Tom | cat |
| Jerry | dog |
| Alfred | duck |
| Sam | |
| Donald | |
表&#34;订单&#34;:
| id | animal |
|:-----------|------------:|
| 1 | cat |
| 2 | dog |
| 3 | duck |
| 4 | frog |
| 5 | pig |
使用以下代码来自 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();
?>
...我得到了这个结果:
| a:1 | b:cat | c:Tom |
| a:2 | b:dog | c:Jerry |
| a:3 | b:duck | c:Alfred |
但我需要的是:
| 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 |
答案 0 :(得分:5)
您可以使用LEFT JOIN
,并使用IF
条件检查值是否为空,以及IFNULL
,这将使列中的空值为空。
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
答案 1 :(得分:0)
我所做的是(我正在使用PDO):
SELECT * FROM animal, orders WHERE orders.animal = animals.animal
它将选择动物和命令表,并从动物的动物行的命令中联合动物行。
你应该得到一个像这样的数组
[0] =>
id = 1
name = tom
animal = cat
[1] =>
id = 2
name =
animal = dog
现在由你来做你想要的所有修改