Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同的MySQL结果_Mysql_Distinct - Fatal编程技术网

不同的MySQL结果

不同的MySQL结果,mysql,distinct,Mysql,Distinct,我有以下SQL查询: 从约会事件中选择c.comid,d.deid,并在d.userid=c.userid上加入同伴c,其中c.userid=5 它输出类似于: ------------- comid | deid ------------- 2 | 17 7 | 17 2 | 18 7 | 18 但我希望它输出的是这样的内容: ------------- comid | deid ------------- 2 | 17 7

我有以下SQL查询:

从约会事件中选择c.comid,d.deid,并在d.userid=c.userid上加入同伴c,其中c.userid=5

它输出类似于:

-------------
comid | deid
-------------
  2   |   17
  7   |   17
  2   |   18
  7   |   18
但我希望它输出的是这样的内容:

-------------
comid | deid
-------------
  2   |   17
  7   |   18
最后,我尝试通过c.comid添加GROUP,它只显示了两个结果,但不太准确:

-------------
comid | deid
-------------
  2   |   17
  2   |   18
我还尝试在SELECT之后添加DISTINCT关键字,但没有任何效果

编辑-过账表结构:

CREATE TABLE IF NOT EXISTS `companions` (
  `comid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userid` int(10) NOT NULL,
  `com_name` varchar(60) NOT NULL,
  PRIMARY KEY (`comid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS `dating_events` (
  `deid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userid` int(10) unsigned NOT NULL,
  `comid` int(10) unsigned NOT NULL,
  `de_dateadded` datetime NOT NULL,
  PRIMARY KEY (`deid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

您可能希望在两个单独的查询中使用
SELECT DISTINCT
,以获取您要查找的值

您的示例输出没有真正意义,因为您任意将comid和deid的值分组在一起。如果要为每个列指定不同的值,只需在两个查询中执行:

SELECT DISTINCT c.comid
FROM dating_events d 
JOIN companions c ON d.userid = c.userid 
WHERE c.userid = 5

SELECT DISTINCT d.deid 
FROM dating_events d 
JOIN companions c ON d.userid = c.userid 
WHERE c.userid = 5

这应该是两个独立的查询:

SELECT DISTINCT c.comid
FROM dating_events d JOIN companions c ON d.userid = c.userid
WHERE c.userid = 5;


原因是显然2/17和7/18是不相关的,所以将它们放入元组是没有意义的。您只有两个单独的数字列表。

您能提供约会事件和同伴表的示例吗?谢谢@unutbu,我对如何格式化这些SQL结果感到非常疯狂:)@angeremoose:我不确定您希望我发布什么样的示例:(我在两个C&D表中都搜索userid,它们相同,但都是=到5,两个C&D表都有userid列,因此我更容易找到哪个comid和Dead属于哪个用户。我计划运行两个查询,但想在一个查询中尝试这样做,这实际上也是我第一次使用联接:o:(@Peter Eisentrut:你为什么说2/17和7/18不相关?因为它们是:哦,也许我误解了什么:o@Zubair1:好吧,你还没有给出任何语义解释,为什么你想把2放在17的旁边,把7放在18的旁边。所以我们只是猜测一下。@Zubair1看起来你想要一个用户同伴的列表,还有一个l该用户的约会事件列表。据推测,这是两个单独的列表(因此应该是两个单独的查询)。通过在一个查询中尝试获取两个列表,您将得到约会事件的所有同伴组合。相反,如果您试图获取用户的同伴列表,并且这些同伴也在用户的约会事件中,则需要添加一个子句来说明这种关系。@Peter Eisentrut:ahhh,我明白了:)好吧,我会尽我最大的努力让它更清楚,comid(同伴id)是由每个用户创建的,而deid(约会事件id)也由每个用户创建,但分配给同伴,因此基本上,deid和comid是相关的,每个deid属于一个comid,每个comid属于一个userid,因此我尝试查找user=5的所有comid和deid,但我希望这两列中都有不同的值。@Wiseguy,是的,你答对了:).这正是我想要为用户获取所有同伴和约会事件的原因,但我似乎无法同时获得comid和deid的不同值:(
SELECT DISTINCT d.deid
FROM dating_events d JOIN companions c ON d.userid = c.userid
WHERE c.userid = 5;