有没有办法简化下面的查询.正如您可以为每个用户行所做的那样,我必须对数据存储区运行3个查询.
$sql = "SELECT * FROM Users"
$result = mysql_query($sql);
while($row=mysql_fetch_assoc($result) {
if($row['first_dataid'] != 0) {
$d1 = mysql_fetch_assoc(mysql_query("SELECT name FROM datastore WHERE dataid = '".$row['first_dataid']."'"));
}
if($row['second_dataid'] != 0) {
$d2 = mysql_fetch_assoc(mysql_query("SELECT name FROM datastore WHERE dataid = '".$row['second_dataid']."'"));
}
if($row['third_dataid'] != 0) {
$d3 = mysql_fetch_assoc(mysql_query("SELECT name FROM datastore WHERE dataid = '".$row['third_dataid']."'"));
}
}
Run Code Online (Sandbox Code Playgroud)
我有一张桌子 datastore
dataid, name, description, createdate
Run Code Online (Sandbox Code Playgroud)
然后,我有一个链接到许多不同的表dataid的datastore如
用户
userid, username, first_dataid, second_dataid, third_dataid
Run Code Online (Sandbox Code Playgroud)
我在想mysql join但是不确定它是否是一列然后我可以尝试类似的东西
select u.* from users u left join datastore d ON d.dataid = u.first_datastoreid
AND ..??
Run Code Online (Sandbox Code Playgroud)
select u.*,
COALESCE(d1.name, d2.name, d3.name) AS name
from users u
left join datastore d1 ON d1.dataid = u.first_datastoreid
left join datastore d2 ON d2.dataid = u.second_datastoreid
left join datastore d3 ON d3.dataid = u.third_datastoreid
Run Code Online (Sandbox Code Playgroud)
该COALESCE线路可以为您提供任何一个.(感谢@DigitalChris)
你应该真正规范化这个数据,你不应该有1,2,3等字段.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |