Почему мои два столбца не выравниваются правильно в IE7?

Хотя пример, ваше предложение WHERE в основном возвращает ВСЕХ пациентов. Вероятно, что убивает вашу производительность, так это то, что вы делаете 3 коррелированных запроса в своих списках полей, каждый раз запрашивая у каждого человека. Один раз для выставления счета и два раза для платежей.

Вместо этого я реструктурировал запрос на основе Pre-Query LEFT-JOIN в таблицы счетов и платежей. Если вы посмотрите, таблица счетов-фактур предварительно суммируется с GROUP BY каждого идентификатора пациента. Аналогично по таблице платежей GROUP BY каждого пациента. Таким образом, в худшем случае каждый подзапрос будет возвращать по САМОЙ одной записи для данного пациента с суммой всех счетов и соответствующих скидок. Для платежей - сумма всех платежей И самая последняя дата.

Таким образом, начиная с таблицы пациентов, я могу присоединиться к общему идентификатору пациента, в котором вы можете увидеть упрощенные итоговые значения для конечного результата, и они будут применимы для всех пациентов. Да, вы можете добавить критерии WHERE для дальнейшего ограничения, но это должно работать значительно лучше.

SELECT 
        p.patientid, 
        p.firstname, 
        p.lastname, 
        p.mobilephone, 
        p.email,
        coalesce( PatInv.JustSumOfAmount - PatInv.DiscountedAmounts, 0 )
            - coalesce( PatPay.PaidAmounts, 0 ) Answer,
        case when PatPay.PatientID IS NULL
            then ' '
            else Date_format( PatPay.LastPaymentDate, '%d-%m-%Y') end lastpaymentdate
    FROM 
        patient p
            LEFT JOIN
            ( select 
                    i.patientID,
                    sum( i.ammount ) justSumOfAmount,
                    sum( i.ammount * ( discount / 100 )) as discountedAmounts
                from
                    invoice i
                where
                    i.invoicedNumber > 0
                group by
                    i.patientID
                order by
                    i.patientid ) PatInv
                on p.patientid = patInv.patientID
            LEFT JOIN
            ( SELECT
                    pay.patientID, 
                    Sum(pay.ammount) paidAmounts,
                    max( pay.paymentDate ) LastPaymentDate
                FROM
                    payment pay
                group by
                    pay.patientID 
                order by
                    pay.patientid ) PatPay
                on p.patientID = patPay.PatientID

Я разместил этот запрос на SQL Fiddle Кроме того, просматривая ваши таблицы, таблицы счетов-фактур и счетов-фактур ДОЛЖНЫ КАЖДЫЙ иметь индекс идентификатора пациента, чтобы помочь оптимизировать запросы. Я не знаю, был ли это пример недосмотра с вашего sql-fiddle vs production, но это тоже повлияло бы на производительность.

У меня есть опция SQLFiddle, которая занимает 5 мс против ваших 2-3 мс, но это только для нескольких предоставленных записей. Я бы поспорил, что против ваших 1000+ пациентов и 1000 транзакций в каждом счете и таблице платежей это сделает этот вариант запроса быстрее, чем коррелированные запросы.

Думайте о своем запросе как об этом. У меня 1000 пациентов. Запросите таблицу счетов 1000 раз, запросите таблицу платежей 2000 раз (1000 для суммы платежей, еще 1000 раз для самой последней даты на пациента).

Мой запрос - предварительно запросите таблицу счетов и суммируйте 1 запись на пациента. Предварительно запросите таблицу платежей и суммируйте 1 запись на пациента. Присоедините пациентов к этим двум подтаблицам напрямую по ID.

5
задан j0k 20 March 2013 в 13:14
поделиться

2 ответа

Я думаю, вам не хватает числа с плавающей запятой прямо в #rightcolumn

#rightcolumn {
     float: right;
}

Вы также можете удалить эти значения из #rightcolumn.

margin-left:480px;
margin-right:10px; 
5
ответ дан 14 December 2019 в 04:47
поделиться

Это то, что я сделал для трех столбцов div (левый, средний и правый - все div)

все три будут иметь размер 310 пикселей с 10 пикселями между ними (всего 950 пикселей), вы можете настроить это в соответствии с вашими размерами.

Уловка заключается в среднем div, он в основном занимает пространство всей «строки», но имеет достаточно отступов, чтобы очистить содержимое левого и правого div, которые «плавают» на верх среднего div.

#left
{
    float: left;
    width: 310px;
}

#middle
{
    padding: 0px 320px 5px 320px;
}

#right
{
    float: right;
    width: 310px;
}
3
ответ дан 14 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: