Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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_Join_Group By - Fatal编程技术网

MySQL:如何从集合中删除行?

MySQL:如何从集合中删除行?,mysql,join,group-by,Mysql,Join,Group By,我要求翻译: 表结构: 线路标识 朗恩还是茹 文本 因此,在表中,它看起来像: 5 | en | Test 6 | en | Hello! 7 | en | Another words 6 | ru | Привет! 并且所有翻译都在同一个表中,具有键行_id,这与语言无关 SELECT txt.line_id, txt.text AS o, ru.text AS t FROM text AS txt, text AS ru WHERE txt.line_id = ru.line_

我要求翻译: 表结构:

线路标识 朗恩还是茹 文本 因此,在表中,它看起来像:

5 | en | Test
6 | en | Hello!
7 | en | Another words
6 | ru | Привет!
并且所有翻译都在同一个表中,具有键行_id,这与语言无关

SELECT txt.line_id, txt.text AS o, ru.text AS t 
  FROM text AS txt, text AS ru 
 WHERE txt.line_id = ru.line_id 
   AND txt.lang = 'en';
它将返回这样的数组

> [5] => Array ( [line_id] => 5 [o] => Test [t] => Test 
> [6] => Array ( [line_id] => 6 [o] => Hello! [t] => Hello! ) 
> [7] => Array ( [line_id] => 6 [o] => Hello! [t] => Привет! )
o-是原文,t-翻译

如何从集合6行删除,因为下一行有翻译。分组将杀死7行并保存6行

最好的结果是:

> [5] => Array ( [line_id] => 5 [o] => Test [t] => ) 
> [6] => Array ( [line_id] => 6 [o] => Hello! [t] => Привет! )

没有[o]=>你好![t] =>你好

从翻译表中排除原始语言

SELECT txt.line_id, txt.text AS o, ru.text AS t 
FROM text AS txt, text AS ru 
WHERE txt.line_id=ru.line_id 
   AND txt.lang='en' 
   AND ru.lang!='en'
新版本用于新描述

SELECT txt.line_id, ru.lang, ru.text AS t 
FROM text AS txt, text AS ru 
WHERE txt.line_id=ru.line_id 
   AND txt.lang='en'
ORDER BY text.lang, txt.line_id

不如按lang desc排序,这样ru位于顶部,然后按行id分组?

我猜您可能需要:

SELECT txt.line_id, 
         txt.text AS o, 
         COALESCE (ru.text,'UNTRANSLATED') AS t 
FROM 
  text AS txt
LEFT JOIN 
  text AS ru 
ON txt.line_id=ru.line_id AND ru.lang='ru'
WHERE txt.lang='en'

为了列出已翻译的行和未翻译的原始行,您必须面对MySql中缺少对访问同一表的子查询的支持

在我看来,你可以划分问题:首先用一个SELECT列出没有翻译的原始行;然后用另一个选项列出翻译;最后使用一个联合体

-- original without translations
SELECT txt.line_id, txt.text AS o, ru.text AS t 
FROM text AS txt LEFT JOIN text AS ru 
ON(txt.line_id = ru.line_id AND txt.lang = 'en' AND ru.lang != 'en')
WHERE ru.line_id IS NULL -- ensures no translations have been found

UNION

-- only matching translations
SELECT txt.line_id, txt.text AS o, ru.text AS t
FROM text AS txt JOIN text AS ru 
ON(txt.line_id = ru.line_id AND txt.lang = 'en' AND ru.lang != 'en');

致以最诚挚的问候。

从表t中删除其中的行_id=6和lang=en?表中的编号:1行:行_id=6,lang='en',text='Hello!';第2行:行id=6,lang='ru',text='ППцццц!'你们能提供你们桌上的东西吗?以2个id为例,提供一些示例我认为问题在于表中有文本,要么是lang=en,要么是lang=en和lang=ru,现在语句必须选择所有lang=ru文本,如果这些文本不存在,则为翻译选择lang=en文本。类似于数组合并的东西。所以你想删除2 | en | Hello记录,因为它在lang ru中可用。。。对的现在根据最新的更新是6 |恩|你好!这将扼杀英语的后援。是的,但我需要显示的不仅仅是带有翻译的行。。。因此,我在描述中添加了我想要的最佳结果。将答案更改为新的描述我编写了ORDER BY line_id ASC,t DESC来对行进行排序,但GROUP BY必须在ORDER BY之前,我认为: