1
$sql1 = "SELECT questions FROM last_check_date WHERE user_id=? ORDER BY questions DESC LIMIT 1";
$sql2 = "SELECT id FROM questions WHERE add_dt>?";

上記のステートメントは何をしますか?

を実行するsql1と、ユーザーの最終チェック日が取得されます。

次に、2番目のクエリを実行して、add date> last check date(from)であるすべてのIDをフェッチし、sql1影響を受ける行数を返します。

私がやりたいのは、この2つのステートメントを1つにマージし、クエリ数を最適化することです。次の問題が発生する可能性があります。

ユーザーの行はありませ$sql1ん:のすべての行を選択しsql2、影響を受ける行数を返す必要があります。

私はそれがどのように見えるべきか理解できません..事前にThx

アップデート

SHOW CREATE TABLE last_check_date;結果は

CREATE TABLE `last_check_date` (
  `id` int(11) unsigned NOT NULL,
  `user_id` bigint(20) unsigned NOT NULL,
  `questions` datetime DEFAULT NULL,
  `users` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

SHOW CREATE TABLE questions;

CREATE TABLE `questions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `author_id` bigint(20) unsigned DEFAULT NULL,
  `question` text NOT NULL,
  `var_a` text NOT NULL,
  `var_b` text NOT NULL,
  `var_c` text NOT NULL,
  `var_d` text NOT NULL,
  `var_e` text NOT NULL,
  `subject` int(11) unsigned DEFAULT NULL,
  `chapter` int(11) unsigned DEFAULT NULL,
  `section` int(11) unsigned DEFAULT NULL,
  `paragraph` int(11) unsigned DEFAULT NULL,
  `rank` tinyint(2) NOT NULL,
  `add_dt` datetime NOT NULL,
  `answer` varchar(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_chapters-id` (`chapter`),
  KEY `fk_paragraphs-id` (`paragraph`),
  KEY `fk_subjects-id` (`subject`),
  KEY `fk_sections-id` (`section`),
  KEY `fk_author-id` (`author_id`),
  CONSTRAINT `fk_author-id` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_chapters-id` FOREIGN KEY (`chapter`) REFERENCES `chapters` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_paragraphs-id` FOREIGN KEY (`paragraph`) REFERENCES `paragraphs` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_sections-id` FOREIGN KEY (`section`) REFERENCES `sections` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_subjects-id` FOREIGN KEY (`subject`) REFERENCES `subjects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
4

2 に答える 2

1

下記参照。その中にレコードがないlast_check_date場合でも、質問を表示したいと思います(その場合はすべて)。

select q.id
from questions q
left outer join (
    select max(questions) as questions
    from last_check_date
    where user_id = ?
) lcd on q.add_date > lcd.questions
where user_id = ?
order by questions desc 
于 2012-06-04T15:46:34.930 に答える
1
$sql = "
    SELECT q.id 
    FROM questions q
    LEFT JOIN (
        SELECT questions 
        FROM last_check_date 
        WHERE user_id=? 
        ORDER BY questions 
        DESC LIMIT 1
    ) l ON q.add_dt > l.questions"

$rs = mysql_query($sql);
$rowcount = mysql_num_rows($rs);

PDO/MYSQLIの適切な構文はまだわかりません。好みのドライバーに適合させてください。

于 2012-06-04T15:54:31.887 に答える