如何使用PHP从多个表中选择所有表

时间:2014-11-15 15:11:44

标签: php mysql

我的数据库中有3个相同的表(相同的列数和列名),它们应该提供3种语言的内容,用户首选语言作为url参数传递。这是我查询一个表的方式:

$sql = "SELECT * FROM news_en WHERE time > $from"; 

$result = $conn->query ( $sql );
        if ($result->num_rows > 0) {

        while ( $row = $result->fetch_assoc () ) {
        echo "Post Title: " . $row ["title"] . "<br>" . "Post Text: " . $row ["article"] . "<br> " . "Time: " . $row ["time"] . "<br>" . "Image: " . "<a href=" . $row ["image"] . ">click for post image</a><br>" . "Source: " . $row ["source"] . "<br><br>";
                        }
                    } else {
                        echo "0 results";
                    }

此查询已正确执行。但是,当我尝试使用3种可用语言时

 $sql = "SELECT * FROM news_en, news_de, news_ru WHERE time > $from";

我收到错误:

 Notice: Trying to get property of non-object in C:\xampp\htdocs\..... on line 54
 0 results 

第54行是

if ($result->num_rows > 0)

所以我假设查询没有正确执行。但如果我通过转到SQL中的phpMyAdmin直接执行相同的查询,则会从所有3个表中提供正确的结果。

我的php出了什么问题?

2 个答案:

答案 0 :(得分:1)

我认为您当然需要了解数据库设计!

更好的数据库设计是将所有语言字符串保存在单个表中,并添加包含语言信息的附加列。

您的查询目前不起作用,因为SELECT查询始终返回类似类型的结果对象。同时从不同的表中进行选择并不能保证这些一致的结果对象,因为表可能具有不同的列。

答案 1 :(得分:1)

当您选择具有相同名称的列时,mysql会感到困惑。解决方案是使用Alias。

$sql = "SELECT en.col1 AS col1en, en.col2 AS col2en, de.col1 AS col1de, de.col2 AS col2de, ru.col1 AS col1ru, ru.col2 AS col2ru
 FROM news_en AS en, news_de AS de, news_ru AS ru WHERE time > $from";