检查每行来自哪个表

时间:2015-09-03 03:56:02

标签: php mysql sql mysqli

我想从多个数据输出数据,每个表的输出都不同。

SELECT * 
FROM subscriptions, albums, videos, pictures 
WHERE subscriptions.site = '$user' 
AND (subscriptions.site = albums.site 
     OR subscriptions.site = videos.site 
     OR subscriptions.site = pictures.site)

这就是我认为应该输出的方式。

while($item = $resultA->fetch_assoc()) {

  if(album){
    echo 'album';
  } 
  if(videos){
    echo 'video';
  }     
  if(pictures){
    echo 'picture';
  } 
}

1 个答案:

答案 0 :(得分:0)

您需要更改您的查询。我假设albumpictureSELECT *, 'album' as type FROM subscriptions s LEFT JOIN albums a on s.site = a.site WHERE subscriptions.site = '$user' union SELECT *, 'videos' as type FROM subscriptions s LEFT JOIN videos v on s.site = v.site WHERE subscriptions.site = '$user' union SELECT *, 'pictures' as type FROM subscriptions s LEFT JOIN pictures p on s.site = p.site WHERE subscriptions.site = '$user' 具有相同的结构,否则您需要匹配列。

并检查php中的列类型

SELECT s.*, p.*, v.*, a.*
FROM subscriptions s 
LEFT JOIN pictures p 
        on s.site = p.site 
LEFT JOIN videos v 
        on s.site = v.site
LEFT JOIN albums a 
        on s.site = a.site
WHERE subscriptions.site = '$user' 

但是如果你的结构非常不同,你可以带上所有列。或者选择与您相关的那个。

column is null

在这种情况下,您必须链接多个检查a.site as "a.site"以检测您正在处理的网站类型。

这是我的猜测

我需要知道您的表架构才能使用正确的字段成员。您必须将字段重命名为查询中的唯一字段。

在这种情况下while($item = $resultA->fetch_assoc()) { if ($item."a.site" is not null) { echo 'album'; } else if ($item."v.site" is not null) { echo 'video'; } else echo 'picture'; } }

{{1}}