繁体   English   中英

如何使用PHP从多个表中全选

[英]how do I SELECT all from multiple tables using PHP

我的数据库中有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)

因此,我假设查询未正确执行。 但是,如果我通过转到phpMyAdmin SQL直接执行相同的查询,则会从所有3个表中给出正确的结果。

我的PHP在做什么错?

我认为您当然需要研究数据库设计!

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

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

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

$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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM