Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Kto przerobi SQLa  (Przeczytany 505 razy)

0 użytkowników i 8 Gości przegląda ten wątek.

Offline Raf

  • Master of disaster
  • Administrator
  • Level 7
  • **********
  • Wiadomości: 7333
  • Wolność, własność, sprawiedliwość
Kto przerobi SQLa
« dnia: 30 Lipca 2015, 20:17 »

   $request = $smcFunc['db_query']('substring', '
      SELECT
         m.poster_time, m.subject, m.id_topic, m.id_member, m.id_msg,
         IFNULL(mem.real_name, m.poster_name) AS poster_name, t.id_board, b.name AS board_name,
         SUBSTRING(m.body, 1, 385) AS body, m.smileys_enabled
      FROM {db_prefix}messages AS m
         INNER JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic)
         INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)
         LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
      WHERE m.id_msg >= {int:likely_max_msg}' .
         (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? '
         AND b.id_board != {int:recycle_board}' : '') . '
         AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? '
         AND t.approved = {int:is_approved}
         AND m.approved = {int:is_approved}' : '') . '
      ORDER BY m.id_msg DESC
      LIMIT ' . $latestPostOptions['number_posts'],
      array(
         'likely_max_msg' => max(0, $modSettings['maxMsgID'] - 50 * $latestPostOptions['number_posts']),
         'recycle_board' => $modSettings['recycle_board'],
         'is_approved' => 1,
      )
   );


trzeba zrobic tak, jakby sie chcialo wyciagnac DISTINCT(m.id_topic)


"Cokolwiek powiesz albo napiszesz, znajdzie się ktoś, kto słyszy lub czyta coś zupełnie innego i jeszcze bezczelnie wmawia Ci to"

Offline Amun-Ra

  • Level 3
  • ***
  • Wiadomości: 148
  • Gdyby mi się chciało…
Re: Kto przerobi SQLa
« Odpowiedź #1 dnia: 31 Lipca 2015, 12:34 »
Nietestowane a już na pewno nieoptymalne.

$request = $smcFunc['db_query']('substring', '
SELECT
   m.poster_time, m.subject, m.id_topic, m.id_member, m.id_msg,
   IFNULL(mem.real_name, m.poster_name) AS poster_name, t.id_board, b.name AS board_name,
   SUBSTRING(m.body, 1, 385) AS body, m.smileys_enabled
FROM {db_prefix}messages AS m
   INNER JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic)
   INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)
   LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
WHERE m.id_topic IN(
SELECT
   DISTINCT(m.id_topic)         
FROM {db_prefix}messages AS m
   INNER JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic)
   INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)
   LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
WHERE m.id_msg >= {int:likely_max_msg}' .
   (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? '
   AND b.id_board != {int:recycle_board}' : '') . '
   AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? '
   AND t.approved = {int:is_approved}
   AND m.approved = {int:is_approved}' : '')
) ORDER BY m.id_msg DESC
LIMIT ' . $latestPostOptions['number_posts'],
      array(
         'likely_max_msg' => max(0, $modSettings['maxMsgID'] - 50 * $latestPostOptions['number_posts']),
         'recycle_board' => $modSettings['recycle_board'],
         'is_approved' => 1,
      )
   );
And the Lord said unto John, come forth and thou shall receive eternal life. But John came fifth and won a toaster.
https://retro.rocks/cc/

Offline Raf

  • Master of disaster
  • Administrator
  • Level 7
  • **********
  • Wiadomości: 7333
  • Wolność, własność, sprawiedliwość
Re: Kto przerobi SQLa
« Odpowiedź #2 dnia: 02 Sierpnia 2015, 15:08 »
jak sprawdze to sam znac, dziekuje za podjecie tematu
"Cokolwiek powiesz albo napiszesz, znajdzie się ktoś, kto słyszy lub czyta coś zupełnie innego i jeszcze bezczelnie wmawia Ci to"