Php 如何使用另一个表中的随机记录更新给定的mySQL表
我有一个像这样的tbl_随机表,其中包含大约3000个关键字和模型ID。关键字是唯一的,型号ID不是:Php 如何使用另一个表中的随机记录更新给定的mySQL表,php,mysql,select,random,sql-update,Php,Mysql,Select,Random,Sql Update,我有一个像这样的tbl_随机表,其中包含大约3000个关键字和模型ID。关键字是唯一的,型号ID不是: +---------+------------+---------+---------+--------------+ | keyword | model_id | make | model | more_data | +---------+------------+---------+---------+--------------+ | apple1 | 15
+---------+------------+---------+---------+--------------+
| keyword | model_id | make | model | more_data |
+---------+------------+---------+---------+--------------+
| apple1 | 15 | | | |
| apple2 | 15 | | | |
| pear | 205 | | | |
| cherry | 307 | | | |
| melon | 5023 | | | |
+---------+------------+---------+---------+--------------+
我还有第二个表tbl_products,其中包含约500K条记录,其中包含实际产品及其详细信息:
+---------+--------+------------+
| make | model | more_data |
+---------+--------+------------+
| app1 | 15 | data1 |
| app1 | 15 | data2 |
| cher74 | 307 | data4 |
| melo2 | 5023 | data5 |
| pear53 | 205 | data3 |
+---------+--------+------------+
两个表之间的公共标识符分别是model_id和model
我需要做的是编写一个更新MySQL查询,它将根据以下条件更新make model和tbl_random中的更多_数据:
查询必须从tbl_产品中选择一个随机行,该行与tbl_random中的每个型号id匹配,以获得唯一关键字
我曾尝试使用UPDATE、LEFT JOIN和SELECT语句以各种方式实现这一点,但到目前为止还无法使其正常工作
我的最新声明是,尝试更新only make,但是它不起作用-MySQL开始执行它,除了需要重新启动MySQL以使其再次可用外,什么都没有发生:
UPDATE tbl_random
SET tbl_random.make =
(SELECT tbl_products.make FROM tbl_products
WHERE tbl_random.model_id = tbl_products.model
GROUP BY tbl_random.keyword
ORDER BY RAND())
tbl_random的最终期望输出如下:
+---------+------------+---------+---------+--------------+
| keyword | model_id | make | model | more_data |
+---------+------------+---------+---------+--------------+
| apple1 | 15 | app1 | 15 | data1 |
| apple2 | 15 | app1 | 15 | data2 |
| pear | 205 | pear53 | 205 | data3 |
| cherry | 307 | cher74 | 307 | data4 |
| melon | 5023 | melo2 | 5023 | data5 |
+---------+------------+---------+---------+--------------+
任何帮助或建议将不胜感激 看起来您的内部选择返回多个项目,然后您试图将其分配给单个字段 尝试将限制1添加到内部选择
UPDATE tbl_random
SET tbl_random.make =
(SELECT tbl_products.make FROM tbl_products
WHERE tbl_random.model_id = tbl_products.model
GROUP BY tbl_random.keyword
ORDER BY RAND() LIMIT 1)
我认为如果第一个选项不起作用,这可能会起作用
REPLACE tbl_random (keyword, model_id, make, model) INTO
SELECT rand2.keyword, rand2.model_id, (SELECT tbl_products.make FROM tbl_products
WHERE rand2.model_id = tbl_products.model
ORDER BY RAND() LIMIT 1), rand2.model_id
FROM tbl_random as rand2
然后,您必须运行第二个查询,以使用make和model作为唯一键更新更多数据。如果我只运行上面的select语句,我得到:1054-where子句中的未知列“tbl_random.model_id”,顺便说一句,我成功地做到了将两个表与此语句保持外部连接,我似乎只是无法相应地更新tbl_随机表:选择tbl_random.keyword,tbl_random.model_id,tbl_products.make,tbl_products.model,FROM tbl_random LEFT OUTER JOIN tbl_random.model_id=tbl_products.model GROUP BY tbl_randor BY tbl_ORDER BYRAND@Strawberry,我在上面的评论中的陈述是你的工作方式,并以我需要的方式提供数据。但是,我需要在常量表中更新它,而不仅仅是在select查询中获取它。如果您有其他建议,我很乐意讨论:如何确定data1属于apple1,data2属于apple2?实际上我不需要确定。app1和app2可能与apple1或apple2相关。这两个表之间的共同点是model_id和model。由于app1和app2都具有model=15,因此应将它们随机放置在model_id=15的任何关键字上,而不正确的结果是不正确解决方案的证明,正确的结果不是正确解决方案的证明。不幸的是,这就是你的处境。至于值的随机分布——这通常是设计不佳的症状。这应该很重要!!TOP不是MySQL构造。更新tbl\U随机集tbl\U random.make=选择tbl\U产品。从tbl\U产品中生成,其中tbl\U random.model\U id=tbl\U产品。模型组按tbl\U随机。关键字顺序按兰德限制1@BradG我觉得我误解了这个问题。我再加了两个答案,如果其中一个能让你进步,请记住。如果不是,他们做什么?我想第二个是最接近的。@BradG你有机会试试这个吗?