2017-02-14 136 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