在数据库中的同一个表中使用join

时间:2016-02-20 12:19:27

标签: php mysql sql join

在我的表格中,我有以下内容:

Database

这是我想要做的。我有一个多语言网站,我的change language按钮会通过支票查看是否存在与当前页面相关的页面,使用其他语言。

让我说每当我改变语言时我都会输入www.example.com/contact-us,在这种情况下,我们可以说是挪威语。我想看看挪威是否有任何相关页面。在这种情况下,www.example.com/kontakt-oss

我尝试使用值language ID这是我想要的语言(2),以及当前页面contact-us。如何从这两个值中生成输出kontakt-oss的选择查询?

我已经尝试了LEFT JOINFULL OUTER JOIN,但我似乎无法找到解决方案。

// CHECK IF PARALELL LANGUAGE PAGE
$sql2 = "SELECT page_name "
. "FROM pages "
. "WHERE page_relations IN (SELECT page_relations FROM pages WHERE page_name = :pagename) AND page_lang = :language";
$query2 = $db_connect->prepare($sql1);
if($query2->execute(array(':pagename' => $get_website_page,':language' => $echomenu['language_id']))){
    echo "/test";
    var_dump("GO!");
}
else{
    var_dump("ERROR");
}

我检查了以下值get_website_page输出:contact-us

$echomenu['language_id']输出:2。

但是,查询简单不会运行并输出ERROR。

2 个答案:

答案 0 :(得分:2)

SELECT *
FROM tbl 
WHERE page_relations IN (SELECT page_relations FROM tbl WHERE page_name='contact-us')
AND page_lang=2

答案 1 :(得分:0)

如果当前页面的page_lang为1,则MySQL查询为

SELECT 
    p2.page_name
FROM
    tableName p1
        INNER JOIN
    tableName p2 ON p1.page_relations = p2.page_relations
        AND p1.page_lang <> p2.page_lang
        AND p1.page_relations == 4 //current page_relations
        AND p1.page_lang == 1;  // current page_lang

如果当前页面的page_lang为2,则MySQL查询为

SELECT 
    p2.page_name
FROM
    tableName p1
        INNER JOIN
    tableName p2 ON p1.page_relations = p2.page_relations
        AND p1.page_lang <> p2.page_lang
        AND p1.page_relations == 4
        AND p1.page_lang == 2; 

您可以将当前page_relation 值或当前 page_lang值作为函数的参数传递