Лучший способ написать этот запрос? -- mysql поле с участием join поле с участием subquery поле с участием query-optimization поле с участием inner-join пол Связанный проблема

Best way to write this query?


0
vote

проблема

русский

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

Я попытался добавить <код> LIMIT 1 к этому, но затем полное запрос возвращено 0 результатов; Итак, теперь он не имеет предела и в EXPLAIN У меня есть два ряда, показывающие, что они используют полные 10k + строки <код> auction_media Table.

Я написал это таким образом, чтобы избежать необходимости запросить таблицу auction_media для каждой строки отдельно, но теперь я думаю, что этот способ не так уж отлично, если он должен использовать весь Auction_Media стол?

Какой путь лучше? То, как у меня есть или запрашивая <код> auction_media таблицы отдельно? ... Или есть лучший способ!?

Вот код:

 <код> SELECT      a.auction_id,     a.name,     media.media_url FROM      auctions AS a      LEFT JOIN users AS u ON u.user_id=a.owner_id      INNER JOIN ( SELECT media_id,media_url,auction_id                           FROM auction_media                           WHERE media_type=1                            AND upload_in_progress=0                           ORDER BY media_id ASC             ) AS media              ON a.auction_id=media.auction_id  WHERE a.hpfeat=1    AND a.active=1    AND a.approved=1    AND a.closed=0    AND a.creation_in_progress=0    AND a.deleted=0    AND (a.list_in='auction' OR u.shop_active='1')  GROUP BY a.auction_id;   

Редактировать: через мое тестирование, использование вышеуказанного запроса кажется, что это будет гораздо более быстрый метод в целом; Однако я волнуюсь, если это все равно будет иметь место, когда 9988777666 таблица растет, чтобы понравилось 1 м или что-то еще.

Английский оригинал

I am doing a sub-query join to another table as I wanted to be able to sort the results I got back with it, I only need the first row but I need them ordered in a certain way so I would get the lowest id.

I tried adding LIMIT 1 to this but then the full query returned 0 results; so now it has no limit and in the EXPLAIN I have two rows showing they are using the full 10k+ rows of the auction_media table.

I wrote it this way to avoid having to query the auction_media table for each row separately, but now I'm thinking that this way isn't that great if it has to use the whole auction_media table?

Which way is better? The way I have it or querying the auction_media table separately? ...or is there a better way!?

Here is the code:

SELECT      a.auction_id,     a.name,     media.media_url FROM      auctions AS a      LEFT JOIN users AS u ON u.user_id=a.owner_id      INNER JOIN ( SELECT media_id,media_url,auction_id                           FROM auction_media                           WHERE media_type=1                            AND upload_in_progress=0                           ORDER BY media_id ASC             ) AS media              ON a.auction_id=media.auction_id  WHERE a.hpfeat=1    AND a.active=1    AND a.approved=1    AND a.closed=0    AND a.creation_in_progress=0    AND a.deleted=0    AND (a.list_in='auction' OR u.shop_active='1')  GROUP BY a.auction_id; 

Edit: Through my testing, using the above query seems like it would be the much faster method overall; however I worry if that will still be the case when the auction_media table grows to like 1M rows or something.

</div
              
       
       

Список ответов

2
 
vote
vote
Лучший ответ
 

Редактировать: Как указано в комментариях - <Код> .x(x)5 не требуется, поскольку таблица аукционов может быть связана только с (максимально) одной строке таблицы пользователей и одну строку во внутреннем запросе.

Вы можете попробовать это. Внешняя группа запросов заменится в отличном, так как у вас нет агрегированной функции. Внутренний запрос, был заменен запросом, чтобы найти наименьший Media_ID на AUCTION_ID, а затем присоединился к Media_url Отказ (Поскольку я не знал, был ли Media_ID и AUCTION_ID Composite уникальный ключ, я использовал то же самое, где он поможет устранить потенциальные дубликаты.)

 <код> .x(x)6  
 

edit: As stated in the comments - DISTINCT is not required because the auctions table can only be associated with (at most) one user table row and one row in the inner query.

You may want to try this. The outer query's GROUP BY is replaced with DISTINCT since you don't have any aggregate function. The inner query, was replaced by a query to find the smallest media_id per auction_id, then JOINed back to get the media_url. (Since I didn't know if the media_id and auction_id were a composite unique key, I used the same WHERE clause to help eliminate potential duplicates.)

SELECT     a.auction_id,     a.name,     auction_media.media_url FROM auctions AS a  LEFT JOIN users AS u    ON u.user_id=a.owner_id  INNER JOIN (SELECT auction_id, MIN(media_id) AS media_id             FROM auction_media              WHERE media_type=1                 AND upload_in_progress=0              GROUP BY auction_id) AS media    ON a.auction_id=media.auction_id  INNER JOIN auction_media   ON auction_media.media_id = media.media_id     AND auction_media.auction_id = media.auction_id     AND auction_media.media_type=1      AND auction_media.upload_in_progress=0  WHERE a.hpfeat=1    AND a.active=1    AND a.approved=1    AND a.closed=0    AND a.creation_in_progress=0    AND a.deleted=0    AND (a.list_in='auction' OR u.shop_active='1'); 
</div
 
 
   
   

Связанный проблема

8  MySQL Заказ с использованием строки даты данных  ( Mysql order by using date data row ) 
У меня есть запрос что-то подобное: <код> public class AlarmReciever extends BroadcastReceiver { AlarmClock alarmClock=new AlarmClock(); @Override public v...

1  Размер базы данных для календаря событий  ( Database size for an event calendar ) 
Я делаю проект на календаре событий, используя PHP и MySQL. У меня есть сомнение, что, когда мы стараемся включить события в каждый час в каждый день, он де...

1  Заказ в порядке без использования событий  ( Order in order without using events ) 
Моя таблица MySQL имеет следующую структуру: <код> +------+----------+-----+-----------+----------------+----------+ | uuid | username | ... | clan_rank | u...

0  Вызов к функции элементов вставить () на нуле. Codeigniter  ( Call to a member function insert on null codeigniter ) 
Привет всем, что я получаю следующую ошибку, когда я отправляю свою форму на мой веб-сайт CI 3: FATAL ОШИБКА: вызов функции элементов вставить () на NULL ...

0  Как написать запрос на Symfony2  ( How to write query on symfony2 ) 
Как я могу написать это в моем репозитории, чтобы иметь возможность работать с ним в моем контроллере? <код> SELECT COUNT(id_pnc) FROM programmevol p WHERE...

2  Testopia: невозможно добавить тестовые случаи в тестовый прогон  ( Testopia unable to add test cases to a test run ) 
Bugzilla 4.4. , Tesopia 2.5, Ubuntu 15 все обновляется и почти по умолчанию по настройкам. Каждый раз, когда я пытаюсь обновить / редактировать существующи...

1  Иерархическая система комментариев в резьбовом режиме: php и mysql  ( Hierarchical commenting system in threaded view php and mysql ) 
У меня есть необходимость оказать резьбовое изображение 2-уровневых иерархических комментариев системы. Комментарии хранятся в базе данных. Информация о иерар...

0  Оптимизировать этот запрос на 1000000+ строк  ( Optimize this query for 1000000 rows ) 
Мне нужно потянуть данные и записывать его в файл CSV, но слишком много времени и слишком много времени. Что не так с этим и что я могу сделать? Кроме того, я...

0  Использование драйвера UnixoDBC для подключения к MySQL, база данных по умолчанию не работает  ( Using unixodbc driver to connect to mysql default database not working ) 
У меня есть мой unixodbc odbc.ini configure файл, как это: <код> [test] Driver = /usr/local/lib/libmyodbc5-5.1.8.so Description = Connector/ODBC 5.1.8 Drive...

1  Дизайн базы данных для заказов и подчинелей  ( Database design for orders and suborders ) 
Ранее я сделал эту схему базы данных со следующей информации: один завод имеет много элементов, и каждый элемент может принадлежать многим порядкам. Предмет и...

0  Добавление поля в запросе MySQL  ( Adding a field in a mysql query ) 
Мне нужно добавить поле в одном из наших запросов. Я NT PHP-программист купил, я немного ударил. Запрос: <код> if (_QUERYSTRING_) { switch ($intMode) { ...

-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто]  ( Php only displaying id and not the value from mysql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

1  MySQL DPKG вернул код ошибки  ( Mysql dpkg returned an error code ) 
Поскольку Ubuntu 16.04 Я не могу установить новую версию MySQL-сервера (5.7). <код> mysql dpkg returned an error code ... Errors were encountered while proc...

3  Можно ли сделать впрыск SQL (высокий уровень) на чертовом уязвимом веб-приложении?  ( Is it possible to do sql injection high level on damn vulnerable web app ) 
Я искал по всему Google Google, чтобы увидеть, как можно было бы обойти следующее (его от высокого уровня безопасности от DVWA): <код> $id = $_GET['id']; ...

3  MySQL слишком много подключений  ( Mysql too many connections ) 
Я ненавижу воспитывать вопрос, который широко спрашивает в Интернете, но я не могу решить это. Я начал проект некоторое время назад и после месяца тестирова...

Связанный проблема

8  MySQL Заказ с использованием строки даты данных 
1  Размер базы данных для календаря событий 
1  Заказ в порядке без использования событий 
0  Вызов к функции элементов вставить () на нуле. Codeigniter 
0  Как написать запрос на Symfony2 
2  Testopia: невозможно добавить тестовые случаи в тестовый прогон 
1  Иерархическая система комментариев в резьбовом режиме: php и mysql 
0  Оптимизировать этот запрос на 1000000+ строк 
0  Использование драйвера UnixoDBC для подключения к MySQL, база данных по умолчанию не работает 
1  Дизайн базы данных для заказов и подчинелей 
0  Добавление поля в запросе MySQL 
-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто] 
1  MySQL DPKG вернул код ошибки 
3  Можно ли сделать впрыск SQL (высокий уровень) на чертовом уязвимом веб-приложении? 
3  MySQL слишком много подключений 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.