{"id":264,"date":"2010-03-29T00:28:09","date_gmt":"2010-03-28T22:28:09","guid":{"rendered":"https:\/\/blog.craue.de\/christian\/?p=264"},"modified":"2010-10-31T10:00:58","modified_gmt":"2010-10-31T09:00:58","slug":"position-einer-zeile-nach-sortierung-ermitteln","status":"publish","type":"post","link":"https:\/\/blog.craue.de\/christian\/2010\/03\/29\/position-einer-zeile-nach-sortierung-ermitteln\/","title":{"rendered":"Position einer Zeile nach Sortierung ermitteln"},"content":{"rendered":"<p>In einer Tabelle sind Artikel mit Datum versehen, wie z. B.:<\/p>\n<pre>item\u00a0\u00a0\u00a0\u00a0 created\r\n----------------\r\n  1\u00a0\u00a0 2010-03-10\r\n  2\u00a0\u00a0 2010-03-20\r\n  3\u00a0\u00a0 2010-03-21\r\n  4\u00a0\u00a0 2010-03-22\r\n  5\u00a0\u00a0 2010-03-23\r\n  6\u00a0\u00a0 2010-03-25\r\n  7\u00a0\u00a0 2010-03-26\r\n  8\u00a0\u00a0 2010-03-27\r\n  9\u00a0\u00a0 2010-03-28\r\n 10\u00a0\u00a0 2010-03-28<\/pre>\n<p>Nun soll zu einem bestimmten Artikel ermittelt werden, wie neu er ist, d. h. der wievielte er w\u00e4re, wenn alle Artikel nach Datum sortiert werden w\u00fcrden. Beispielsweise soll f\u00fcr den Artikel 8 die Position 3 ausgegeben werden, da er der drittneueste Artikel ist. Das l\u00e4sst sich mit folgender Abfrage l\u00f6sen:<\/p>\n<pre>SELECT `SortedItems`.`position`\r\nFROM (\r\n  SELECT t.`item`,\r\n         @rowCount := @rowCount + 1 `position`\r\n  FROM\u00a0\u00a0 `Test` t,\r\n         (SELECT @rowCount := 0) `dummyTableName_notNeeded`\r\n  ORDER BY `created` DESC\r\n) `SortedItems`\r\nWHERE `SortedItems`.`item` = \"8\"<\/pre>\n<p>In der inneren Abfrage werden nun also alle Artikel absteigend nach Datum sortiert, sodass der neueste Artikel an erster Stelle steht. Dabei wird eine Variable (<em>rowCount<\/em>) verwendet, die f\u00fcr jeden Artikel die aktuelle Zeilennummer mitz\u00e4hlt und in dem Zwischenergebnis in die Spalte <em>position<\/em> eintr\u00e4gt. Die Variable <em>rowCount<\/em> muss zuvor mit 0 initialisiert werden. Die \u00e4u\u00dfere Abfrage liefert dann lediglich die Position des gew\u00fcnschten Artikels.<\/p>\n<p>Auf diese L\u00f6sung hat mich <a title=\"ein alter Kommentar zu dem Thema in einem anderen Blog\" href=\"http:\/\/www.xaprb.com\/blog\/2006\/12\/02\/how-to-number-rows-in-mysql\/#comment-5637\" target=\"_blank\">ein alter Kommentar zu dem Thema in einem anderen Blog<\/a> gebracht.<\/p>\n<p>F\u00fcr alle, die damit selbst ein wenig spielen m\u00f6chten, hier die Anweisungen zum Erzeugen und F\u00fcllen der Test-Tabelle:<\/p>\n<pre>CREATE TABLE `Test` (\r\n  `item` int(11) NOT NULL,\r\n  `created` date NOT NULL,\r\n  PRIMARY KEY (`item`)\r\n);\r\n\r\nINSERT `Test` (`item`, `created`) VALUES\r\n(1, '2010-03-10'),\r\n(2, '2010-03-20'),\r\n(3, '2010-03-21'),\r\n(4, '2010-03-22'),\r\n(5, '2010-03-23'),\r\n(6, '2010-03-25'),\r\n(7, '2010-03-26'),\r\n(8, '2010-03-27'),\r\n(9, '2010-03-28'),\r\n(10, '2010-03-28');<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>In einer Tabelle sind Artikel mit Datum versehen, wie z. B.: item\u00a0\u00a0\u00a0\u00a0 created &#8212;&#8212;&#8212;&#8212;&#8212;- 1\u00a0\u00a0 2010-03-10 2\u00a0\u00a0 2010-03-20 3\u00a0\u00a0 2010-03-21 4\u00a0\u00a0 2010-03-22 5\u00a0\u00a0 2010-03-23 6\u00a0\u00a0 2010-03-25 7\u00a0\u00a0 2010-03-26 8\u00a0\u00a0 2010-03-27 9\u00a0\u00a0 2010-03-28 10\u00a0\u00a0 2010-03-28 Nun soll zu einem bestimmten Artikel ermittelt werden, wie neu er ist, d. h. der wievielte er w\u00e4re, wenn alle Artikel [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132],"tags":[133,209],"_links":{"self":[{"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/posts\/264"}],"collection":[{"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/comments?post=264"}],"version-history":[{"count":0,"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/posts\/264\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/media?parent=264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/categories?post=264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.craue.de\/christian\/wp-json\/wp\/v2\/tags?post=264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}