Autor Zpráva
JardaB
Profil
Zdravím, opět bych potřeboval poradit, páč na ty dotazy do MySQL dtb sem fakt slabší, předem moc děkuji

tabulka 'reklama' a sloupce 'id','url','nazev'
a
tabulka proklik se sloupci 'id', 'id_reklama','time' - sem se zapisují prokliky s id reklamy na kterou bylo kliknuto

Potřebuji z tabulky 'reklama' vypsat ty reklamy u kterých se v tabulce 'proklik' nenachází pod 'id_reklama' žádný záznam nebo se tam nachází a záznam 'time' je starší jak 3600 + seřadit dle toho že vypsat prvně záznamy které se v druhé tabulce nenachází a poté až ty co ano a vyhovují stáří 3600s
Ve stručnosti chci nabízet do pořadí reklamy, na které ještě nikdo neklikl nebo klikl a je to déle jak hodinu.
Kajman
Profil
Ostatní reklamní systémy naopak upředňostnují reklamy, na které lidi rádi klikají.

Váš přístup je opačný - čím méně zajímavá reklama pro čtenáře, tím časteji ji zobrazíte.

Mohlo by to být něco jako

select r.id, 0 poradi from reklama r left join proklik p on r.id=p.id_reklama where p.id_reklama is null
union all
select p.id_reklama, 1 poradi from proklik p group by p.id_reklama having max(p.time)<'2018-01-25 09:40:00'
order by poradi
JardaB
Profil
Moc děkuji, mrknu na to a otestuji....
juriad
Profil
Jakým způsobem ukládáš čas (time), je to DATETIME nebo je to INTEGER?

Jiné řešení:
SELECT r.*, pp.last 
FROM reklama r
LEFT JOIN (
  SELECT p.id_reklama, MAX(p.time) last
  FROM proklik p 
  GROUP BY p.id_reklama
) pp ON r.id = pp.id_reklama
WHERE pp.last IS NULL OR pp.last < NOW() - INTERVAL 1 HOUR
ORDER BY pp.last IS NULL DESC, pp.last ASC

JardaB:
Prosím, zkus psát trochu civilizovaněji. Čárky ve větách opravdu dělají projev čitelnějším.
JardaB
Profil
Způsobem INTEGER. Pokusím se v projevu příště polepšit...

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: