2015-11-03 180 views
-1

我試圖選擇一些記錄,而不是124我得到992記錄與下一個查詢。任何人都可以幫助我嗎?我得到了相同記錄的重複,我不知道爲什麼。SQL SELECT查詢返回重複項

SELECT uszc_posts.*, uszc_postmeta.*, uszc_users.*, uszc_utilizatori_acord.* 
FROM uszc_posts, uszc_postmeta, uszc_users, uszc_utilizatori_acord 
WHERE uszc_posts.ID = uszc_postmeta.post_id 
AND uszc_users.ID = uszc_posts.post_author 
AND uszc_users.user_email = uszc_utilizatori_acord.email 
AND uszc_posts.ID IN (783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1150, 1151, 1152, 1153, 1154, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363) 
ORDER BY `uszc_posts`.`post_date` ASC 

我也使用SELECT DISTINCT(post_author)嘗試,但我得到的只有25項結果,而不是124

+0

沒有嘗試'SELECT DISTINCT uszc_posts。*,...' –

+0

@JuanCarlosOropeza,是的,我做到了。用剛纔你說的更新我的問題。我知道肯定查詢應該返回124條記錄 – Ionut

+0

您應該提供樣本數據和模式,您可以使用http://sqlfiddle.com/沒有數據,我們沒有辦法猜測爲什麼你沒有你想要的行。 –

回答

0

你是不是真正得到重複,你得到非常相似行因您加入到路postmeta表。例如,假設您有一個ID爲1的帖子,並且它有三個後值,分別爲1,2,3,如果運行以下查詢,您將返回3行。

SELECT p.ID, pm.meta_value FROM posts p, postmeta pm WHERE p.ID = pm.post_id 

結果:

p.ID pm.meta_value 
=================== 
1  1 
1  2 
1  3 

根據您想要的結果,也有對這個問題的不同解決方案。如果您只想爲您的posts彙總數據,您可以GROUP BY p.ID爲每個帖子返回一行,但您的postmeta值將失去解析度,並且無法保證將返回哪一個。您可以指定一個postmeta值來進一步減少重複項,但是此表中的某個特定鍵仍可能有重複條目,因此如果每個帖子只需要一行,您仍然需要GROUP BY

這是我會怎麼寫你的查詢

-- using COUNT(p.Id) will show you how many results were GROUP(ed) BY the p.ID 
SELECT COUNT(p.Id) num_results, p.*, pm.meta_key, pm.meta_value, u.*, ua.* 
FROM uszc_posts p 
LEFT JOIN uszc_postmeta pm 
    ON pm.post_id = p.ID AND pm.meta_key = '?????' -- the key you are interested in 
LEFT JOIN uszc_users u 
    ON u.ID = p.post_author 
LEFT JOIN uszc_utilizatori_acord ua 
    ON ua.email = u.user_email 
WHERE p.ID IN (783, 784, 785....) 
GROUP BY p.ID 
ORDER BY p.post_date ASC