2017-02-14 133 views
0

我有一个MySQL的声明,它的工作原理 - 我可以得到所需的记录 - movies.* & groups.namePHP/MySQL从多个表中选择记录

$stmt= $mysqli->query("SELECT DISTINCT ebooks.*, groups.name FROM ebooks 
INNER JOIN ebooks_groups ON ebooks.uuid = ebooks_groups.ebookuuid 
INNER JOIN groups_users ON ebooks_groups.groupuuid = groups_users.groupuuid 
INNER JOIN groups ON groups_users.groupuuid = groups.uuid 
WHERE useruuid=".$get_useruuid." 
ORDER BY groups.name"); 

1/但是我需要从groups表抢另一列 - 即groups.uuid

我试图

SELECT DISTINCT movies.*, groups.* FROM movies, groups 

&

SELECT DISTINCT movies.*, groups.name, groups.uuid FROM movies, groups 

但检索到没有记录。

2/然后,我再看看我的原代码 - ... FROM movies ... - 这是怎么工作的,甚至如果我不选择FROM movies, groups表?

+3

**警告**:当使用'mysqli'时,你应该使用[参数化查询](http: //php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)到将用户数据添加到您的查询。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **绝不**将'$ _POST'或'$ _GET'数据直接放入查询中,如果有人试图利用您的错误,这会非常有害。 – tadman

+0

有关MySQL的问题,所以,如果是我,我会忘记所有其他的东西,并专注于此。因此,请参阅http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql - 查询 – Strawberry

回答

0

AFAIK,这是纯粹的MySQL。 PHP或不起作用。

首先要理解的是隐式加入: Explicit vs implicit SQL joins 理解应该至少解决一半的问题。其次,如果没有很好的理由(并且很少),我绝不会编码SELECT *。选择需要的列而不是全部获取它们是更有意义的,即使您需要所有当前存在的列,如果稍后处理数据库模型,可能会有更多(或更少)的列数据库,如果你没有明确列出你的代码,那么你的代码就很难被发现。

其余的我逐步构建SQL查询。这对调试你的查询尤其有帮助。因为你有实际的表格和一些样本数据... [这应该解决你的另一半问题]

+0

谢谢,这让我走上了正确的道路 - 不需要'INNER JOIN',我的列名在表中冲突。 – boomshanka