2014-03-06 173 views
2

我是mysql和php的新手。从多个表中选择所有值

我有两个表'成员'和'点'。他们都包括“用户名”列。我想从这两个表中选择所有的值,其中username = $ POST [username]。

所以我写了这个,但这是行不通的。

$username = $_POST['username']; 
$sql = $con->prepare("SELECT *.members, *.points FROM members, points WHERE 
username=?"); 
     $sql->bind_param("s", $username); 
     $sql->execute(); 
     $result = $sql->get_result(); 
     $row = $result->fetch_assoc(); 

我试过这样:

$sql = $con->prepare("SELECT * FROM members INNER JOIN points 
ON username.points = username.members WHERE username=?"); 
     $sql->bind_param("s", $username); 
     $sql->execute(); 
     $result = $sql->get_result(); 
     $row = $result->fetch_assoc(); 

这:

$sql = $con->prepare("SELECT *.points, *.members FROM members INNER JOIN points 
ON username.points = username.members WHERE username=?"); 
     $sql->bind_param("s", $username); 
     $sql->execute(); 
     $result = $sql->get_result(); 
     $row = $result->fetch_assoc(); 

我不能使用UNION因为columbs的数量在这些表中equel。

那么,请帮助我什么是错的代码?从多个表中选择全部的正确方法是什么?

+2

+1使用准备好的语句并绑定变量。 – Aaron

回答

1

别名是为了用来指定那些列属于哪个表,所以你需要预先表名的列

SELECT * FROM members 
INNER JOIN points 
ON points.username = members.username 
WHERE points.username = ? 

,而选择另外您也可以一个别名分配给你的表,并使用它们

SELECT * FROM members a 
INNER JOIN points b 
ON a.username = b.username 
WHERE a.username = ? 
+0

谢谢你的回答,它运行良好(:。我没有使用别名,就像你的第二个建议。使用别名有什么好处,除了节省时间? – ctarimli

+2

其实它是相同的,使用短别名可以节省时间长查询虽然 – Fabio

1

你接近这个:

SELECT *.points, *.members 
FROM members 
INNER JOIN points ON username.points = username.members 
WHERE username=? 

试试这个:

SELECT * 
FROM members 
INNER JOIN points ON members.username = points.username 
WHERE members.username=? 
+0

什么是'* .points,* .members'?我认为它应该是相反的'points。*,members。*' – Fabio

+0

@Fabio你是对的,我不小心从OP的问题中粘贴了 – Aaron

0

检查这个 SELECT * FROM pointsmembers WHERE pointsusername =“'。$ _ POST ['username']。'”AND membersusername =“'。$ _ POST ['username']。'”; 你可以检查这个查询,它非常简单。

+0

OP已经使用了一个准备好的语句,为什么要把他带回SQL容易受到攻击的东西呢?另外,这告诉OP使用ANSI-89 JOIN表示法,ANSI-92标准已经存在了20多年,那么现在是不是我们都开始明确说明我们的JOIN? – Aaron

+0

这只是一个逻辑,sql如何工作取决于使用。 –