这是我的表结构,在这里我需要交换项目。这意味着,您可以看到类型 3 总是成对出现(类型 3 项目总是成对)。
我只是命名配对项目,以了解成对的第一个 1 是主项,第二个是子项。 所以对的主人不应该出现在 5、10 和 15 位置
如果到了那个地方我需要将下一个项目交换到那个地方(下一个项目将是子它不应该被视为下一个项目)
pid 10 (comes in 10 position) i need to swap it like this
pid type name
.. .. ..
10 2 B2
11 3 E1(master)
12 3 A2(sub)
.. .. ..
pid type pname
1 1 A
2 1 B
3 2 C
4 3 D(mater)
5 3 E(sub)
6 1 A1
7 2 B1
8 1 C1
9 2 D1
10 3 E1(master)
11 3 A2(sub)
12 2 B2
13 1 C2
14 2 D2
15 1 E3
需要进一步的帮助
我给你表结构和测试数据,如果你有想法,请与我分享!
CREATE TABLE IF NOT EXISTS `table_swap1` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`type` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17;
INSERT INTO `table_swap1` (`pid`, `type`, `name`) VALUES
(1, 1, 'A'),(2, 1, 'B'),(3, 2, 'D'),(4, 3, 'E(master)'),
(5, 3, 'f(sub)'),(6, 1, 'A1'),(7, 2, 'B1'),(8, 1, 'C1'),
(9, 2, 'D1'),(10, 3, 'E1(master)'),(11, 3, 'A2(sub)'),(12, 2, 'B2'),
(13, 1, 'C2'),(14, 2, 'D2'), (15, 1, 'E2');
SELECT aa.pid, (
CASE aa.pid
WHEN bb.apid
THEN bb.atype
WHEN bb.bpid
THEN bb.btype
WHEN bb.cpid
THEN bb.ctype
ELSE aa.type
END
)
TYPE , (
CASE aa.pid
WHEN bb.apid
THEN bb.aname
WHEN bb.bpid
THEN bb.bname
WHEN bb.cpid
THEN bb.cname
ELSE aa.name
END
)name
FROM (
SELECT a.pid +1 apid, a.TYPE atype, a.NAME aname,
b.pid +1 bpid, b.type btype, b.name bname,
c.pid -2 cpid, c.type ctype, c.name cname
FROM table_swap1 a, table_swap1 b, table_swap1 c
WHERE MOD( a.pid, 5 ) =0
AND a.pid +1 = b.pid
AND a.type =3
AND a.type = b.type
AND a.pid +2 = c.pid
)bb, table_swap1 aa
GROUP BY pid
This Query did what i exactly need ... But In my case pid is Primary key. so i can't get the results in 1 to 15 order . So can i do this row number... how can i do
欢迎各种建议,甚至是 php 中的解决方案 让我在 mysql 或任何其他方式中这样做是可能的..
最佳答案
所以,基本上你的问题可以表述为:
The first product of two adjacent products of type 3 cannot be placed
in a position which is a multiple of 5.
让事情变得复杂的是,您的表格中没有订单,没有订单,就不可能为您的产品定义一个恒定的“位置”。未指定不带 ORDER BY 的 SELECT 返回行的顺序。
无论如何,最简单的方法是在应用程序中执行此操作。将结果作为数组抓取并扫描,如果您发现两个产品位置不正确,只需将它们在数组中打乱即可。
关于php - mysql交换项目与行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675277/
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195
我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
我一直在尝试使用nanoc用于生成静态网站。我需要组织一个复杂的排列页面,我想让我的内容保持干燥。包含或合并的概念在nanoc系统中如何运作?我已阅读文档,但似乎找不到我想要的内容。例如:我如何获取两个部分内容项并将它们合并到一个新的内容项中。在staticmatic您可以在您的页面中执行以下操作。=partial('partials/shared/navigation')类似的约定在nanoc中如何运作? 最佳答案 这里是nanoc的作者。在nanoc中,部分是布局。因此,您可以拥有layouts/partials/shared/