SQL SELECT查询返回重复项

时间:2015-11-03 16:55:32

标签: php mysql sql wordpress

我试图选择一些记录,但是在下一次查询中我得到了992条记录,而不是124条记录。有人可以帮我吗?我得到相同记录的副本,我不知道为什么。

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个结果。

1 个答案:

答案 0 :(得分:0)

由于您加入postmeta表的方式,您实际上并没有获得重复项,因此您获得了非常相似的行。例如,假设您有一个ID为1的帖子,并且它有三个postmeta值,123,如果您运行以下查询,您将回到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值会失去分辨率,并且可以&#39 ; t保证哪一个将被退回。您可以指定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