通过一个查询从2个相关和1个不相关的MySQL表中获取数据?

时间:2012-09-28 05:17:43

标签: php mysql join multiple-tables

我正在尝试为我的博客创建一个档案页面,该页面仍在构建中。我有三个不同的MySQL表我需要从中提取数据,其中一个与另一个无关。我发现了一个类似的帖子here,但看到我对PHP不是很有经验,我无法想象如何将其转换为我需要的。我知道这可以通过执行三个不同的查询轻松完成,但这会给服务器带来不必要的负担,并减慢页面加载时间和其他所有内容。

2个相关类别是“博客”和“类别”,而第三个类别是内置于博客中的不同应用程序,名为“Brain Link”

以下是相关表格的两个查询:

    $blogQuery = mysqli_query($link, "SELECT * FROM pub_blogs ORDER BY id DESC") or die ("Could not access DB: " . mysqli_error($link));

    $row = mysqli_fetch_assoc($blogQuery);  
    $blogID = $link->real_escape_string($row['id']);
    $title = $link->real_escape_string($row['title']);
    $date = $link->real_escape_string($row['date']);
    $category = $link->real_escape_string($row['category']);
    $content = $link->real_escape_string($row['content']);

    $blogID = stripslashes($blogID);
    $title = stripslashes($title);
    $date = stripslashes($date);
    $category = stripslashes($category);
    $content = stripslashes($content);

    $catQuery = mysqli_query($link, "SELECT * FROM categories ORDER BY id DESC") or die ("Could not access DB: " . mysqli_error($link));

    $row = mysqli_fetch_assoc($catQuery);
    $catID = $link->real_escape_string($row['id']);
    $catName = $link->real_escape_string($row['name']);
    $description = $link->real_escape_string($row['descriptions']);

    $catID = stripslashes($catID);
    $catName = stripslashes($catName);
    $description = stripslashes($description);

这是第三个不相关的查询:

    $brainQuery = mysqli_query($link, "SELECT * FROM brain_links ORDER BY id DESC") or die ("Could not access DB: " . mysqli_error($link));

    $row = mysqli_fetch_assoc($brainQuery);
    $brainID = $link->real_escape_string($row['id']);
    $site_name = $link->real_escape_string($row['site_name']);
    $site_url = $link->real_escape_string($row['site_url']);
    $post_date = $link->real_escape_string($row['post_date']);

是否可以通过一个查询从所有这三个数据中获取数据?如果没有,有人可以指向某个方向指示我如何加入这两个相关的方向吗?

博客表格会在“类别”列下保存类别ID,以确定其所属的类别

我感谢任何帮助或建议!

2 个答案:

答案 0 :(得分:0)

这将带来两个表中的数据。但是,从第三表数据中得不到数据

SELECT 
        * 
FROM pub_blogs 
LEFT JOIN categories on categories.id = pub_blogs .category
ORDER BY id DESC

第三个表的Ajnd你无法获得它,因为你无法建立到任何其他表的链接。如果您更改表结构,则可以执行此操作。

答案 1 :(得分:0)

你不能使用相同的查询从第3个表中获取数据。 Mysql想要两个表之间的映射。

您可以加入博客和类别,但不能加入大脑链接

对于前两个表:

select * , c.id , c.name , c.descriptions from pub_blogs p  join categories c on c.id = p.category order by id desc ;  

对于第三个表,由于没有映射,您无法加入它。

快乐编码:)