【问题标题】:Joining three queries which are in array [closed]加入数组中的三个查询[关闭]
【发布时间】:2014-03-26 10:46:23
【问题描述】:

我正在尝试添加三个查询:

$query1 = "SELECT * FROM sailors S";
$query2 = "SELECT * FROM boats B";
$query3 = "SELECT * FROM reserves R";

我需要存储在数组中:

$arr1 = array($query1);
$arr2 = array($query2);
$arr3 = array($query3);

我试过这个:

$queryall = 
"SELECT q1.sname, q1.age, q1.rating, q2.bname, q2.color, q3.rdate 
FROM ($arr1) AS q1, ($arr2) AS q2, ($arr3) AS q3 
WHERE q1.sid = q3.sid AND q2.bid = q3.bid";

但是由于数组,它给了我字符串conversion error的数组。 我需要join这三个表,而他们在arrays,并获取相应的数据。 我该怎么做?

【问题讨论】:

  • 为什么需要将它们存储在数组中?
  • 这是一个课堂练习。我知道如何在不存储到数组的情况下做到这一点(并且做到了),但我们需要用数组来做,我找不到其他方法。
  • 数组中还有其他内容吗? (它们是否只有单个元素)?
  • 不,只是查询(字符串)
  • 同理,每个数组是否只有一个元素? (它们的长度是否超过 1?)

标签: php mysql arrays


【解决方案1】:
SELECT q1.sname, q1.age, q1.rating, q2.bname, q2.color, q3.rdate FROM sailors AS q1, boats AS q2, reserves AS q3 WHERE q1.sid=q3.sid AND q2.bid=q3.bid

我的语法可能全错了。 SQL 不是我的强项。您可以使用JOIN 而不是选择所有这些。

按数组进行。

在您对数组的查询中,您为表添加了一个名称并从中选择了所有列。要构建它,您需要以下查询:

 (SELECT * FROM sailors S) (SELECT * FROM boats B) (SELECT * FROM reserves R) WHERE S.sid=R.sid AND B.bid=R.bid

所以

$query="($arr1)($arr2)($arr3) WHERE S.sid=R.sid AND B.bid=R.bid";

或者,如果你想使用AS

$arr1="SELECT q1.name,q1.age,q1.rating FROM sailors AS q1";
$arr2="SELECT q2.bname,q2.color FROM boats AS q2";
$arr3="SELECT q3.rdate FROM reserves AS q3";

$query="($arr1)($arr2)($arr3) WHERE q1.sid=q3.sid AND q2.bid=q3.bid";

【讨论】:

  • 我用过 jon 但有问题。
  • @user3463745 是的,加入有点棘手。先用两张桌子试试,然后进步。
【解决方案2】:

如果我理解正确,您应该能够内爆数组,得到字符串结果,然后使用它。

实际上,这只是将数组转换为字符串,然后在查询中使用它们。

请参阅this question,了解如何在 php 中将具有单个元素的数组转换为字符串。

$text1 = array_shift($arr1);
$text2 = array_shift($arr2);
$text3 = array_shift($arr3);

$queryall = 
"SELECT q1.sname, q1.age, q1.rating, q2.bname, q2.color, q3.rdate 
FROM ($text1) AS q1, ($text2) AS q2, ($text3) AS q3 
WHERE q1.sid = q3.sid AND q2.bid = q3.bid";

【讨论】:

  • 效果很好。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2021-06-20
  • 2014-09-07
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多