我搜索了我的问题,但似乎没有人回答我的特殊需要。这是一个简单的表连接,但我尝试过的每件事都失败了。也许你可以帮忙。注意:所有行都有POSTS中的post_id,但并非所有post_id都与CALENDAR相关,即并非所有帖子都有日历条目。我在PHP中使用MYSQL,而不是MYSQLi。
POST_CAT- post_id,cat_id POSTS- post_id,标题,描述 CALENDAR- post_id,on_date,to_date
目前我通过多对多选择找到相关的post_id,然后使用一系列for循环从单个表输出。这很有效。但我需要在一个数组中包含相关post_id的日历条目:
mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("adamsmap_db") or die(mysql_error());
if (isset($_POST['activities'])) {
$post_id = mysql_query("SELECT post_id FROM post_cat WHERE cat_id = '1'");
while ($row = mysql_fetch_array($post_id, MYSQL_NUM)) {
for ($i=0;$i < count($row); $i++) {
$output = mysql_query("SELECT user_id, title, description FROM posts WHERE post_id='$row[$i]'");
while ($rowoutput = mysql_fetch_array($output, MYSQL_NUM)) {
for($i=0;$i < count($rowoutput);$i++) {
echo $rowoutput[$i]." ";
}
echo"<br /> <br />";
}}}}
答案 0 :(得分:1)
此查询将复制您编码的业务逻辑和日历信息:
SELECT
zpc.ost_id, p.user_id, p.title, p.description, c.*
FROM Z_post_cat zpc
INNER JOIN posts p ON zpc.post_id = p.post_id
INNER JOIN calendar c ON c.post_id = = p.post_id
WHERE zpc.cat_id = '1'
如果您希望包含没有帖子的类别,请使用LEFT JOIN而不是INNER JOIN。
此外,由于安全问题,建议您转移到PDO或Mysqli而不是mysql。