Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверочный запрос не дает тот же результат
 
 автор: elenaki   (02.03.2014 в 17:55)   письмо автору
 
 

Есть сложный запрос выбора из трех таблиц данных товара, попутно названия его производителя и первой фотографии:


SELECT products.*, products.id as prod_id, products.prod_title_GR as prod_title, prod_photos.prod_id as photos_prod_id, prod_photos.photo_order, prod_photos.photo_path, 
manufacturers.id as manuf_id, manufacturers.title_GR as manuf_title FROM products JOIN prod_photos ON (products.id=prod_photos.prod_id AND prod_photos.photo_order =1)JOIN 
manufacturers  ON products.manuf_id=manufacturers.id 


Не ругайте, что не использую псевдонимы, мне так понятнее.
Дело в том, что когда я делаю проверочный запрос (выбираю все товары), получается разница на 5-6 товаров. Откуда? Предположила, что у каких-то товаров нет фотографий. Проверила, нашелся один такой.
Товаров, у которых не было бы id производителя, не нашлось.
Товаров, у которых не было бы фотографии с порядком 1, не нашлось.
А ведь я только по этим проверяю. Как еще можно попробовать поискать, где разница?

  Ответить  
 
 автор: Valick   (02.03.2014 в 20:01)   письмо автору
 
   для: elenaki   (02.03.2014 в 17:55)
 

Используйте LEFT JOIN или RIGHT JOIN для четкого указания доминирующей таблицы

  Ответить  
 
 автор: Trianon   (03.03.2014 в 02:10)   письмо автору
 
   для: elenaki   (02.03.2014 в 17:55)
 

еще варианты :
1. id производителя у товара есть, а самого производителя в таблице нету.
2. фоток с порядком 1 больше одной.

первый случай убирается через LEFT JOIN.
фотки второго случая стоит убрать отдельным запросом.

  Ответить  
 
 автор: elenaki   (03.03.2014 в 09:54)   письмо автору
 
   для: Trianon   (03.03.2014 в 02:10)
 

1. такого быть не может. Производителей всего 2. У всех товаров есть id производителя и
он, конечно, или 1 или 2
2. об этом подумала позже. Клиент долго заносил фотки, не заморачиваясь особо определе-
нием их порядка. Пришлось насильно все нулевые фотки сделать первыми. Тем более, что
тогда было совсем немного товаров, у которых было бы больше одной фотки. Пойду думать,
как выцепить только одну фотку.

Хотя по запросу с условиями выбирается меньше, чем по общему запросу без условий. Не
должно быть наоборот?

  Ответить  
 
 автор: elenaki   (03.03.2014 в 17:24)   письмо автору
 
   для: Trianon   (03.03.2014 в 02:10)
 

Ура! Нашла! Дело не в базе и не в запросе. Обратила внимание, что какие бы варианты
поиска я не выбирала, разница была в 6 товаров. А это как раз количество товаров на
странице. Надо было в запросе в LIMIT сделать -1 к номеру страницы. Всем спасибо.
Трианону особенный респект.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования