2012-05-15 40 views
0

這是我的查詢,從一個表中獲取模型信息,從另一個表中獲取單個圖片。爲了讓它在ORDER BY排序DESC的地方得到圖片,我必須對這個查詢做些什麼改變?在圖片的表格中,有一個名爲「sort」的字段。每行的字段的默認值爲0.但是一個隨機行的值爲1.我想獲得該特定的行。但是,我不想使用WHERE sort = 1,因爲即使在沒有行具有排序值1的情況下,也應該獲取一行。php mysql內部連接 ​​- 獲取特定行

$sql="SELECT tc.id,tc.alias,tc.firstname,tci.imagename 
      FROM ".$pre."models tc 
      INNER JOIN ".$pre."model_images tci ON tc.id=tci.userid 
      WHERE activated=1 AND sex=$sex AND city=$city AND published=1 
      GROUP BY tc.id ORDER BY firstname ASC"; 

預先感謝您!


使用解決:

SELECT tc.id,tc.alias,tc.firstname, 
    (SELECT imagename FROM ".$pre."model_images WHERE userid= tc.id 
    ORDER BY sort DESC LIMIT 1) AS imagename 
    FROM ".$pre."models tc 
    WHERE tc.activated=1 AND tc.sex=1 AND tc.city=2 AND tc.published=1 
    ORDER BY tc.firstname ASC 
+3

'WHERE sort = 1' –

+0

問題已更新。對困惑感到抱歉。 – salmanhijazi

+0

'ORDER BY排序DESC,名字ASC'? – billyonecan

回答

0

你應該把,在你的WHERE子句以及。有一點需要注意,但要注意你使用列名的方式。最好告訴他們屬於哪張表。

所以這樣的:

WHERE activated=1 AND sex=$sex AND city=$city AND published=1 

應該是:

WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 

,然後只需在 '排序' 列添加到它:

WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 AND tci.sort=1 

如果不返回任何結果,然後確保有符合要求的記錄。因爲查詢沒有問題。嘗試打印查詢到屏幕等,看看每個變量是否有一個值。

編輯:

你應該失去GROUP BY。

SELECT tc.id,tc.alias,tc.firstname,tci.imagename 
FROM ".$pre."models tc 
INNER JOIN ".$pre."model_images tci ON tc.id=tci.userid 
WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 AND tci.sort=1 
+0

我已更新問題。你能否相應地編輯?謝謝! – salmanhijazi

+0

然後我將有多個訂單由:GROUP BY tc.id ORDER BY名字ASC。我該如何解決這個問題? – salmanhijazi

+0

@salmanhijazi不知道你真的想做什麼。你的GROUP BY是錯誤的。 MySQL默認允許像GROUP BY這樣的錯誤查詢。你正在按tc.id分組。我假設你是主鍵?你不能通過總是唯一的東西來分組。 ---但是,如果它不是唯一的,那麼你仍然只能顯示你在GROUP BY中指定的列,以及一些額外的信息,如SUM(),AVG()等等。你不能只在SELECT中放置任何列使用GROUP BY。如果您不知道自己的喜好以及爲什麼要嘗試對結果進行分組,那很難幫助您。 – w00