SQL SELECT的问题

时间:2011-12-16 19:23:11

标签: php mysql

  

可能重复:
  one variable row inside another variable row

我的脚本类似于 -

$sql = "SELECT * FROM `users`"
$q = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($q);
$sql1 = "SELECT * FROM `other_table`";
$q1 = mysql_query($sql1) or die(mysql_error());
$row1 = mysql_fetch_array($q1);
$item = $row1[$row['username']];

如何在另一个变量行中设置一个变量行,因为它不起作用。基本上,我需要选择用户名,然后从其他表中选择用户用户名的列,其中写有用户点。

我在考虑添加 -

$sql = "SELECT * FROM `users`"
$q = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($q);
$sql1 = "SELECT `".$row['username']."` FROM `other_table` WHERE `uid` = 1";
$q1 = mysql_query($sql1) or die(mysql_error());
$row1 = mysql_fetch_array($q1);
$item = $row1[xxxxxxxxxx]; // DONT KNOW HOW TO DEFINE IT, so it takes out found variable (there is only one).

我已经有问题,但没有完整信息,我不知道如何删除它:(!

这是我的表 -

用户

的 'id' - '名称' '1' - '胆红素' '2' - '康纳' '3' - '伊利安'

Other_table(为用户保留点数)

的 'id' - '胆红素' - '康纳' - '伊利安' '1' - '2' - '3' - '55'

不要问,为什么我不把这些点放在同一张桌子上,因为如果可以,我会这样做;)!

2 个答案:

答案 0 :(得分:1)

听起来你需要重新设计表格,我建议像这样的表结构:

Table Users
ID | Name

Table Points
UserID | Points

这样,您可以在表之间添加外键约束,然后执行简单的连接查询,如:

SELECT U.Name, P.Points FROM Users AS U INNER JOIN Points AS P ON U.ID = P.UserID

然后你的PHP代码看起来像:

$sql = "SELECT U.Name, P.Points FROM Users AS U INNER JOIN Points AS P ON U.ID = P.UserID";
$q = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($q);

以下是您的创建表查询:

CREATE TABLE Users (ID INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(50) NOT NULL, PRIMARY KEY (ID))
CREATE TABLE Points (UserID INT NOT NULL, Points INT,
    FOREIGN KEY(UserID) REFERENCES Users(ID) ON UPDATE CASCADE ON DELETE CASCADE)

修改

这应该允许你获取值(注意:未经测试,因为我没有php / mysql实例当前搞乱),但是对于更强大的解决方案,你真的应该考虑重新设计你的表模式。

$userName = $row['username'];
$sql1 = "SELECT [". $userName ."] FROM other_table WHERE [uid] = 1";
$q1 = mysql_query($sql1) or die(mysql_error());
$row1 = mysql_fetch_array($q1);
$item = $row1[$userName];

答案 1 :(得分:0)

SELECT users.id, users.name, other_table.points FROM users LEFT JOIN other_table ON other_table.name=users.name