Выбрать данные из 2-х таблиц [mysql]

Статус
В этой теме нельзя размещать новые ответы.

KillDead

Хранитель порядка
Регистрация
11 Авг 2006
Сообщения
894
Реакции
579
В общем есть 2 таблицы jos_vm_product_price
product_id | product_name | avtor |...

jos_vm_product_price
product_id | product_price | ...

Что мне нужно- одним запросом вытащить инфу из 2-х таблиц (название товара+ цену).
Делаю запрос
HTML:
SELECT jos_vm_product_price.product_id,  jos_vm_product.avtor, jos_vm_product.product_name ,jos_vm_product_price.product_price FROM jos_vm_product, jos_vm_product_price WHERE jos_vm_product.product_id = jos_vm_product_price.product_id
Но не у каджого товара есть цена, те jos_vm_product_price.product_id отсутствует. Помогите составить верный WHERE
 
Так в чём проблема?
Тебе нужны только записи с ценой?
Если да, то AND jos_vm_product_price.product_price != '' (или проверка на 0 или NULL, в зависимости от того как построена таблица)
 
select
jos_vm_product_price.product_id,
jos_vm_product.avtor,
jos_vm_product.product_name ,
jos_vm_product_price.product_price
FROM jos_vm_product
left join jos_vm_product_price On jos_vm_product_price.product_id = jos_vm_product.Id

where
jos_vm_product_price is not null //будут только товары с ценой, без where все товары
 
Всё, спасибо, разобрался:)
 
опять туплю :). Теперь ситуация такая: Таблица с товарами осталась jos_vm_product
product_id | product_name | avtor |...

и есть таблица со статистикой
jos_vm_stat
id | id_product | ip |date

Нужно подсчитать количество строк в jos_vm_stat принадлежащих товару.

Что-то типо
select
DISTINCT
jos_vm_product.product_id,
jos_vm_product.product_name
,(select count(*) from jos_vm_stat WHERE jos_vm_stat.id_product = jos_vm_product.product_id)
FROM jos_vm_product, jos_vm_stat LIMIT 0,10
Запрос виснет
:bc:
 
решил проблему оптимизацией таблиц:smmne:
 
Непопёрло.:confused: На дреневере скрипт выполняется за 0.5 сек. На говнохосторе - 11сек. Я не очень в mysql, может можно что либо оптимизировать?
Трабла в том- что у товара должен быть рейтинг. Он формирется в зависимости когда кликнули на товар (текущая неделя- клик считается за 1, клик на прошлой неделе - 0.8 и тп). Если делаю отдельным запросом- всё нормально. Но мне нужно сортировать по рейтингу. Пытаюсь:

Код:
select 
DISTINCT 
jos_vm_product.product_id, 
jos_vm_product.avtor, 
jos_vm_product.product_name ,
jos_vm_product_price.product_price, 
jos_vm_product.product_thumb_image
,jos_vm_product_price.product_price 
FROM jos_vm_product
left join jos_vm_product_price On jos_vm_product_price.product_id = jos_vm_product.product_id
where jos_vm_product_price.product_price is not null ORDER BY (
[B](select count(*) from jos_vm_stat WHERE jos_vm_stat.id_product = jos_vm_product.product_id AND jos_vm_stat.refer < '2009-04-01') + [/B]
[B](select count(*) from jos_vm_stat WHERE jos_vm_stat.id_product = jos_vm_product.product_id AND jos_vm_stat.refer > '2009-04-01' AND jos_vm_stat.refer < '2009-03-25')*0.8 + [/B]
[B](select count(*) from jos_vm_stat WHERE jos_vm_stat.id_product = jos_vm_product.product_id AND jos_vm_stat.refer > '2009-03-25' AND jos_vm_stat.refer < '2009-03-18')*0.6 + [/B]
[B](select count(*) from jos_vm_stat WHERE jos_vm_stat.id_product = jos_vm_product.product_id AND jos_vm_stat.refer > '2009-03-08' AND jos_vm_stat.refer < '2009-02-17')*0.2 + [/B]
[B](select count(*) from jos_vm_stat WHERE jos_vm_stat.id_product = jos_vm_product.product_id AND jos_vm_stat.refer < '2009-02-16')*0.2[/B]
) DESC LIMIT 10


explain вернул следующее :
5d9900ce507c.png
 
А зачем тебе каждый запрос производить расчет рейтинга?
Cделай кеширование, т.е. в таблицу товара добавь поле рейтинг, в котором будет храниться указанная сумма, и пересчитывай ее раз в сутки.
А уж сортировка по этому полю будет происходить быстро
 
Непопёрло.:confused: На дреневере скрипт выполняется за 0.5 сек. На говнохосторе - 11сек. Я не очень в mysql, может можно что либо оптимизировать?
Трабла в том- что у товара должен быть рейтинг. Он формирется в зависимости когда кликнули на товар (текущая неделя- клик считается за 1, клик на прошлой неделе - 0.8 и тп). Если делаю отдельным запросом- всё нормально. Но мне нужно сортировать по рейтингу.

Согласен с Вилленом. Кроме того, что этот запрос должен во время каждого клика вычислять рейтинг на лету, так еще и даты интервалов должны корректно изменяться со временем. Вполне разумный вариант с добавлением поля рейтинг в таблицу товаров и пересчета этого поля по расписанию, хоть раз в час.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху