Witam,

mam mały problem ze skonstruowaniem zapytania.

Mam dwie tabelki "auctions" i "investment"

Tabela "auctions"
--------------------
id
title
startdate // data rozpoczęcia aukcji
isend

Tabela "investment"
--------------------
auctionid
date // data inwestycji
ispay

Chciałbym pokazać aukcje, które zostały zakończone i dodatkowo pobrać czas trwania aukcji odejmując datę startu od daty ostatniej inwestycji.

Mam zapytanie które działa jeżeli sortujemy np. według "id":

  1. SELECT a.id AS id,
  2. a.title AS title,
  3. (SELECT MAX(date)
  4. FROM investment
  5. WHERE auctionid = a.id AND ispay="1") - a.startdate AS time
  6. FROM auctions AS a
  7. WHERE a.isend="1"
  8. ORDER BY id ASC
  9. LIMIT 0 , 10


Problem jest jeżeli chcę posortować dane według najkrótszego czasu, czyli "ORDER BY time ASC".

Aukcji jest około 40tys. a inwestorów 170tys. Po przefiltrowaniu aukcji (wybraniu tylko zakończonych) jest ich około 30tys. a przypisanych do nich inwestorów około 90tys. Przy takiej ilości strona się wysypuje i pojawia błąd wewnętrzny (Error 500).

Mógłbym napisać skrypt który przejdzie przez wszystkie aukcje i pobierze datę ostatniej inwestycji i uaktualni pole np. "enddate", które dodam do tabelki "auctions".

Tylko, że aukcje są pobierane z danych xml, w których nie podawana jest data zakończenia. Inwestorzy są pobierani z innej listy danych. Za każdym razem musiałby być odpalany ten skrypt aby uaktualnić dane.

Czy istnieje jednak możliwość pobrania tych danych za pomocą jednego zapytania, podczas próby ich wyświetlenia?