โดย thatsawan » 08/09/2016 3:52 pm
sql-error เขียน:ขอคำอธิบาย รายละเอียดเพิ่มเติมประกอบคำถามหน่อยครับ
select topic id ชุดเเรก ที่ได้จากตอนกดค้นหาครั้งเเรก
โค้ด: เลือกทั้งหมด
$sql_array = array(
'SELECT' => 'DISTINCT tt.topic_id',
'FROM' => array(
$this->m_topictags => 'tt'
),
'WHERE' => array(),
'LEFT_JOIN' => array(),
'ORDER_BY' => array(),
);
if ($a_search[0]) {
$sql_array['WHERE'] = 'tt.topic_id IN (' . $a_search[0] . ')';
$topic_id_search_tmp = $this->db->sql_build_query('SELECT', $sql_array);
}
ต้องการเก็บข้อมูล topic_id เข้าตาราง TEMPORARY TABLE ถ้ามีข้อมูลชุดเเรกเเล้ว จะได้เอาไปใช้ในการหา เงื่อนไขถัดไป
โค้ด: เลือกทั้งหมด
$sql = 'CREATE TEMPORARY TABLE tmp_topic_id_new ( topic_id_tmp INT NOT NULL );';
$result = $this->db->sql_query($sql);
$sql = 'INSERT INTO tmp_topic_id_new (topic_id_tmp)' . $topic_id_search_tmp;
$result = $this->db->sql_query($sql);
จากนั้น เขียนคำสั่ง SQL มาเพื่อหาเอามาต่อ เงื่อนไขในการหาค่าตัวถัดไป
โค้ด: เลือกทั้งหมด
$sql_tmp_select = 'SELECT * FROM tmp_topic_id_new';
$and_tmpsearch = ' AND tt.topic_id IN (' . $sql_tmp_select . ')';
foreach ($a_search as $value) {
$a_search_and_tmp[] = ' tt.topic_id IN (' . $value . $and_tmpsearch . ')';
}
โค้ด: เลือกทั้งหมด
$sql_array['WHERE'] = implode(' AND', $a_search_and_tmp);
$topic_id_search = $this->db->sql_build_query('SELECT', $sql_array);
มันก็จะได้คำสั่ง SQL ชุดนี้
โค้ด: เลือกทั้งหมด
SELECT t.topic_id,t.topic_title,t.topic_poster,t.topic_time,t.topic_views,t.topic_first_post_id,t.topic_first_poster_name,t.topic_first_poster_colour,t.topic_last_post_id,t.topic_last_poster_id,t.topic_posts_approved,t.topic_posts_unapproved,t.topic_posts_softdeleted,t.topic_status,t.topic_type,t.topic_last_post_subject,t.topic_last_poster_colour,t.poll_start,t.topic_last_poster_name,t.topic_last_post_time,t.topic_last_view_time,t.forum_id FROM (phpbb_topics t) WHERE t.topic_id IN (SELECT DISTINCT tt.topic_id FROM (phpbb_m_topictags tt) WHERE tt.topic_id IN (SELECT tt.topic_id FROM (phpbb_m_topictags tt) WHERE tt.tag_id = 442 AND tt.topic_id IN (SELECT * FROM tmp_topic_id_new)) AND tt.topic_id IN (SELECT tt.topic_id FROM (phpbb_m_topictags tt) WHERE tt.tag_id = 440 AND tt.topic_id IN (SELECT * FROM tmp_topic_id_new))) AND t.topic_posts_unapproved != 1 ORDER BY t.topic_last_post_time DESC LIMIT 25
เเต่ผลคือมัน Can't reopen table: 'tmp_topic_id_new'
[quote="sql-error"]ขอคำอธิบาย รายละเอียดเพิ่มเติมประกอบคำถามหน่อยครับ[/quote]
select topic id ชุดเเรก ที่ได้จากตอนกดค้นหาครั้งเเรก
[code=php]$sql_array = array(
'SELECT' => 'DISTINCT tt.topic_id',
'FROM' => array(
$this->m_topictags => 'tt'
),
'WHERE' => array(),
'LEFT_JOIN' => array(),
'ORDER_BY' => array(),
);
if ($a_search[0]) {
$sql_array['WHERE'] = 'tt.topic_id IN (' . $a_search[0] . ')';
$topic_id_search_tmp = $this->db->sql_build_query('SELECT', $sql_array);
}[/code]
ต้องการเก็บข้อมูล topic_id เข้าตาราง TEMPORARY TABLE ถ้ามีข้อมูลชุดเเรกเเล้ว จะได้เอาไปใช้ในการหา เงื่อนไขถัดไป
[code=php] $sql = 'CREATE TEMPORARY TABLE tmp_topic_id_new ( topic_id_tmp INT NOT NULL );';
$result = $this->db->sql_query($sql);
$sql = 'INSERT INTO tmp_topic_id_new (topic_id_tmp)' . $topic_id_search_tmp;
$result = $this->db->sql_query($sql);
[/code]
จากนั้น เขียนคำสั่ง SQL มาเพื่อหาเอามาต่อ เงื่อนไขในการหาค่าตัวถัดไป
[code=php] $sql_tmp_select = 'SELECT * FROM tmp_topic_id_new';
$and_tmpsearch = ' AND tt.topic_id IN (' . $sql_tmp_select . ')';
foreach ($a_search as $value) {
$a_search_and_tmp[] = ' tt.topic_id IN (' . $value . $and_tmpsearch . ')';
} [/code]
[code=php] $sql_array['WHERE'] = implode(' AND', $a_search_and_tmp);
$topic_id_search = $this->db->sql_build_query('SELECT', $sql_array); [/code]
มันก็จะได้คำสั่ง SQL ชุดนี้
[code=php]SELECT t.topic_id,t.topic_title,t.topic_poster,t.topic_time,t.topic_views,t.topic_first_post_id,t.topic_first_poster_name,t.topic_first_poster_colour,t.topic_last_post_id,t.topic_last_poster_id,t.topic_posts_approved,t.topic_posts_unapproved,t.topic_posts_softdeleted,t.topic_status,t.topic_type,t.topic_last_post_subject,t.topic_last_poster_colour,t.poll_start,t.topic_last_poster_name,t.topic_last_post_time,t.topic_last_view_time,t.forum_id FROM (phpbb_topics t) WHERE t.topic_id IN (SELECT DISTINCT tt.topic_id FROM (phpbb_m_topictags tt) WHERE tt.topic_id IN (SELECT tt.topic_id FROM (phpbb_m_topictags tt) WHERE tt.tag_id = 442 AND tt.topic_id IN (SELECT * FROM tmp_topic_id_new)) AND tt.topic_id IN (SELECT tt.topic_id FROM (phpbb_m_topictags tt) WHERE tt.tag_id = 440 AND tt.topic_id IN (SELECT * FROM tmp_topic_id_new))) AND t.topic_posts_unapproved != 1 ORDER BY t.topic_last_post_time DESC LIMIT 25[/code]
เเต่ผลคือมัน Can't reopen table: 'tmp_topic_id_new'