2014-03-19 39 views
1

这是我的表看起来像:PHP/MySQL的:从同一表2项中选择一个查询中

id | name | value 
----------------- 
1 | user1| 1 
2 | user2| 1 
3 | user3| 3 
4 | user4| 8 
5 | user5| 6 
6 | user7| 4 
7 | user8| 9 
8 | user9| 2 

我想要做的是选择所有其他用户,在一个查询中,谁的价值user1的值低于它的值加3,高于它的值减3或等于它的值。

事情是这样的:

$result = mysqli_query($con,"SELECT * FROM users WHERE value<'4' OR value>'-2'") or die("Error: ".mysqli_error($con)); 

while($row = mysqli_fetch_array($result)) 
    { 
     echo $row['name'].'<br/>'; 
    } 

的问题是,用户1的值可以改变每次运行查询时。

+0

它不可能用单个查询... 首先你写查询来获取user1值 例如,选择值氟利昂表,其中名称=“USER1” 然后创建上2个变量和下限值 $上= USER1值3 $较低=用户1的值或$较低= USER1值-3 并使用BETWEEN – tejasShah

回答

1

对不起,跛脚的名字,但这应该工作:

注意:我命名表与您的数据为 “ST”。

SELECT b.user, a.value as "user1val", b.value as "otheruservalue" FROM st as a 
     join st as b 
     on a.user = "user1" and a.user != b.user 
where 
    (b.value > (a.value - 3)) and (b.value < (a.value + 3)) 

我们得到user1的价值,并通过加入同一个表中其他用户的价值的独特的对。之后,我们只做一些简单的比较来筛选具有合适值的行。

+0

谢谢你的帮助,这正是我一直在寻找的。我实际上并不知道如何使用连接功能。 – user1885099

0
$user1 = mysql_fetch_assoc(mysql_query("SELECT `value` FROM `users` WHERE id='1'")); 

$result = mysql_query("SELECT * FROM `users` WHERE value<'".$user1['value']."+3' OR value>'".$user1['value']."-3'"); 
+0

旁注:OP使用'mysqli_ *'函数,而不是'mysql_ *' –

+0

'问题是每次查询运行时,users1的值可能会有所不同。' –

+0

我不是:)。但他会明白的。 – OfirH

0

或嵌套查询:

$result = mysqli_query($con, "select * from `users` where `value` < (select `value` from `users` where `name`='user1')+3 OR `value` > (select `value` from `users` where `name`='user1')-3"); 
+1

我会在这里推荐使用面向对象方法PDO来访问数据库。因为它不是主题,并且StackOverflow对任何不是答案的建议都非常密切,所以我只会在这个评论中注意到它。然而,如今连接和请求大多数数据库类型的方式更加容易,更简单和安全。 – Alex

相关问题