Autor Zpráva
Gustav
Profil *
Dobrý den,

abych to nejdříve trochu popsal. Mám 3 tabulky (pagerank,srank,alexarank), všechny mají tyto sloupce (id, d_id, score, created[timestamp]). Dále je tam tabulka domains, která není podstatná.

SELECT DISTINCT d.domain, s.score srank, p.score pagerank, a.score alexarank
FROM domains d
INNER JOIN srank s ON s.d_id = d.id
INNER JOIN pagerank p ON p.d_id = d.id
INNER JOIN alexarank a ON a.d_id = d.id
WHERE d.id = 143

Tímto dotazem získávám srank, pagerank a alexarank k určité doméně (kdy d.id = id domény). Získávám poslední záznam podle timestampu ve sloupci created a já bych potřeboval získat přechodzí záznam (které nemusí být den předtím, ani dva, ale třeba týden zpět) k tomu abych mohl porovnat změněné hodnoty.

Například mám timestamp z 8.1.2012 kde jsou hodnoty (5,1,8) a já potřebuju získat záznam z 5.1.2012, ale neznám přesný datum toho záznamu, vím jen že je předposlední a zde budou hodnoty (4,1,8) tím pádem se jedna hodnota změnila o 1 nahoru. Snad někdo chápe čeho bych rád docílil. Předem děkuji za nápovědy.
Tori
Profil
Některé časteji řešené dotazy pro MySQL - FAQ » Data pro další a předchozí záznam vůči $id, když jsou položky seřazeny podle jiného sloupečku než id
Gustav
Profil *
Díky, snad to pomůže.


Příliš to nechápu, především tento řádek -

and (a.sloupecek > b.sloupecek or (a.sloupecek = b.sloupecek and a.id > b.id))

tady porovnávám sloupecek a se sloupeckem b ale ja potřebuju porovnávat dvě hodnoty ve stejném sloupci a tabulce.
peta
Profil
jmeno_db.jmeno_tbl.jmeno_sloupce
a.sloupecek = nazev sloupce je sloupecek z tabulky a
b.sloupecek = nazev sloupce je sloupecek z tabulky b

Tu samou logiku pouzivas v sql dotazu, co jsi napsal, kde to pouzivas pro pripojovani sql tabulky.
INNER JOIN pagerank p ON p.d_id = d.id
tabulka P sloupecek d_id = tabulka D sloupecek id
Mozna jsi jen prehledl radek, se seznamem tabulek.
from   tabulka a, tabulka b
Tori
Profil
Gustav:
Asi ten odkaz nebyl úplně vhodný, jak teď koukám. Podstatná věc - když vkládáte nová data, tak přidáváte do všech tří tabulek naráz řádek se stejným timestampem, anebo může mít např. poslední záznamy pro danou doménu v každé tabulce jiný timestamp?
Pokud je stejný, tak by mohlo fungovat toto:
SELECT DISTINCT d.domain, s.score srank, p.score pagerank, a.score alexarank
FROM domains d
INNER JOIN (SELECT created FROM srank WHERE s.d_id = 143 ORDER BY created DESC LIMIT 1, 1) ref
INNER JOIN srank s ON s.d_id = d.id AND s.created = ref.created
INNER JOIN pagerank p ON p.d_id = d.id AND p.created = ref.created
INNER JOIN alexarank a ON a.d_id = d.id AND a.created = ref.created
WHERE d.id = 143
Kajman
Profil
Gustav:
Jak získáváte poslední záznam podle timestampu ve sloupci created? Dotazem uvedeným v [#1] to asi nebude.

Osobně bych při dotazu na poslední známou hodnotu ranku ke konkrétnímu id domény jen dat limit 2.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: