有没有办法简化下面的查询。正如您可以为每个用户行所做的那样,我必须对数据存储区运行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']."'"));
}
}
我有一张表datastore
dataid, name, description, createdate
然后我有许多不同的表格链接到dataid
的{{1}},例如
用户
datastore
我在想mysql join,但不确定它是否只有一列,然后我可以尝试类似
userid, username, first_dataid, second_dataid, third_dataid
答案 0 :(得分:5)
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
COALESCE
行可以为您填写任何内容。(感谢@DigitalChris)
你应该真正规范化这些数据,你不应该有1,2,3等字段。
答案 1 :(得分:0)
目前还不清楚您将如何使用这些数据,因此我无法向您推荐最佳查询。
响应您在问题结束时的上一次查询尝试 - 这将为您提供所有关联的数据存储区,其中包含1个连接,每个连接位于separete行:
SELECT u.*, d.dataid, d.name -- put columns you need here
FROM users u
LEFT JOIN datastore d
ON d.dataid in (u.first_datastoreid, u.second_dataid, u.third_dataid)
为了更好地规范化,请考虑使用多对多关系https://stackoverflow.com/a/2923921/350021
答案 2 :(得分:-1)
您可以尝试此sql查询
select u.* from users u
left join datastore d1 ON d1.dataid = u.first_dataid
left join datastore d2 ON d2.dataid = u.second_dataid
left join datastore d3 ON d3.dataid = u.third_dataid
答案 3 :(得分:-1)
SELECT * FROM Users
LEFT JOIN datastore datastore1 ON Users.first_dataid = datastore1.dataid
LEFT JOIN datastore datastore2 ON Users.second_dataid = datastore2.dataid
LEFT JOIN datastore datastore3 ON Users.third_dataid = datastore3.dataid