我正在开发一个计算项目,并被要求使用连接查询从两个不同的表中获取信息。我想从两个表中的单行中获取所有值。我使用唯一的ID来识别每一行。
if(isset($_GET['edit'])){
$savingsId = $_GET['savingsId']; // To use to get other stuff
$sql="SELECT Savings_Allocation.Bank,Savings_Allocation.TotalAmt,Savings_Allocation.Interest,Savings.Type,Savings.Access
FROM Savings_Allocation,Savings
INNER JOIN Savings
WHERE Savings.savingsId AND Savings_Allocation.savingsId = '$savingsId'";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
我看过现有的例子,但它们似乎有点令人困惑/不回答我正在尝试做的事情。
答案 0 :(得分:1)
您的查询中存在一些小错误。在' From'您只需要使用第一个表,并且您需要告诉连接第一个表中的哪个字段与第二个表中的哪个字段匹配。在您只需将一个字段与$savingsId
此查询可能有效:
SELECT Savings_Allocation.Bank,Savings_Allocation.TotalAmt,Savings_Allocation.Interest,Savings.Type,Savings.Access
FROM Savings_Allocation
INNER JOIN Savings ON Savings.savingsId = Savings_Allocation.savingsId
WHERE Savings.savingsId = '$savingsId'
现在上面的查询有一个最后的缺陷:在查询字符串中使用变量是不安全的,并使查询倾向于SQL注入。因此,请阅读PHP's guide on SQL injection有关如何进行安全查询的信息。并且不要使用mysql_query
,因为自PHP 5.5以来它已被弃用,甚至已在PHP 7中删除。建议改为使用mysqli
或PDO
。
答案 1 :(得分:0)
以下是两个表,学生和付款的所有可能查询。
students name id id_student datepayment
1 Lisa 1 1 2017-01-01
2 2 1 2017-02-03
3 Asher 3 2 2017-03-05
4 Lee 4 1 2017-03-03
查询
select students.name, payment.datepayment
FROM students, payment
where students.id_student = payment.id_student;
会给出这个结果 - 所有学生的名字在表格支付中都有id_student
name datepayment
Lisa 2017-01-01
Lisa 2017-02-03
Lisa 2017-03-03
2017-03-05
查询
SELECT s.name, p.datepayment
FROM
students s
LEFT OUTER JOIN payment p ON s.id_student = p.id_student;
会给出这样的结果:来自左表(学生)的所有学生姓名在表格付款中有或没有id_student:
name datepayment
Lisa 2017-01-01
Lisa 2017-02-03
2017-03-05
Lisa 2017-03-03
Asher NULL
Lee NULL
查询
SELECT s.name, p.datepayment
FROM
students s
RIGHT OUTER JOIN payment p ON s.id_student = p.id_student;
会给出这个结果 - 全部来自RIGHT牌桌付款,只有学生名字在表格付款中有id_student:
name datepayment
Lisa 2017-01-01
Lisa 2017-02-03
2017-03-05
Lisa 2017-03-03
查询
SELECT s.name, p.datepayment
FROM
students s
INNER JOIN payment p ON s.id_student = p.id_student;
会给出这个结果 - 所有在表格付款中都有id_student的学生姓名:
name datepayment
Lisa 2017-01-01
Lisa 2017-02-03
Lisa 2017-03-03
2017-03-05