Как я могу отправить почту через Gmail с Perl?

Похоже, вы хотите показать 12 последних участников, которые соответствуют определенным критериям.

Несколько вещей.

  1. Ваш RIGHT JOIN в photos на самом деле является обычным внутренним JOIN: его столбцы появляются в вашем предложении WHERE.
  2. Возможно, вам нужны составные индексы в таблицах members и photos.
  3. SELECT many columns FROM ... JOIN ... ORDER BY column... LIMIT 12 является известным антипаттерном производительности: он создает сложный набор результатов, затем сортирует все, а затем отбрасывает почти все. Расточительное.
  4. У вас есть WHERE....members.banned != "1" фильтры неравенства, подобные этому, которые заставляют SQL работать тяжелее (== медленнее), чем равенства. Если вы можете изменить это на = "0" или что-то подобное, сделайте это.

(Я полагаю, ваш столбец lastdate находится в вашей таблице members, но вы не сказали нам этого в своем вопросе.)

Поэтому попробуйте что-то подобное, чтобы найти двенадцать Участники, которых вы хотите отобразить.

          SELECT members.mem_id
            FROM members
            JOIN photos ON members.mem_id=photos.mem_id
           WHERE photos.main=1 
             AND photos.approved=1
             AND members.banned!="1"
             AND members.profile_photo="1"
             AND members.profile_essentials="1"
             AND members.profile_user="1")
           ORDER BY lastdate DESC
           LIMIT 12

Это дает вам идентификаторы двенадцати членов, которые вы хотите. Используйте его в своем основном запросе.

    SELECT members.mem_id, members.username, members.online, 
           members.dob, members.regdate, members.sex, 
           members.mem_type, members.aboutme, 
           geo_cities.name AS city, 
           geo_countries.name AS country, photos.photo_path
      FROM members
      LEFT JOIN geo_cities    ON members.cty_id=geo_cities.cty_id
      LEFT JOIN geo_countries ON geo_cities.con_id=geo_countries.con_id
      JOIN photos ON members.mem_id=photos.mem_id
    WHERE members.mem_id IN (
          SELECT members.mem_id
            FROM members
            JOIN photos ON members.mem_id=photos.mem_id
           WHERE photos.main=1 
             AND photos.approved=1
             AND members.banned!="1"
             AND members.profile_photo="1"
             AND members.profile_essentials="1"
             AND members.profile_user="1")
           ORDER BY lastdate DESC
           LIMIT 12
         )
    ORDER BY lastdate DESC
    LIMIT 12

Это находит двенадцать членов, о которых вы заботитесь, а затем вытаскивает только их записи, вместо того, чтобы извлекать все записи.

Затем создайте составной индекс по members(profile_photo, profile_essentials, profile_user, banned, lastdate). Этот составной индекс значительно ускорит ваше предложение WHERE.

Аналогично, создайте составной индекс на photos(mem_id, main, approved, photo_path).

Вещи всегда становятся захватывающими, когда базы данных начинают расти! Прочитайте онлайн-книгу Маркуса Винанда https://use-the-index-luke.com/

9
задан brian d foy 11 November 2008 в 01:29
поделиться

3 ответа

10
ответ дан 4 December 2019 в 09:14
поделиться

Вы могли всегда отправлять с SMTP. Сервером является smtp.gmail.com, он требует TLS и использует аутентификацию. Вам, вероятно, также придется включить POP/IMAP в Вашей учетной записи.

8
ответ дан 4 December 2019 в 09:14
поделиться

У меня была та же проблема с Почтой:: Веб-почта:: Gmail, я закончил тем, что использовал Сеть:: IMAP:: Простой:: SSL для получения моей почты от Gmail. Я предположил бы, должен ли я был попытаться отправить почту с ним, я сначала попробовал бы Сеть:: SMTP:: Сервер.

5
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

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