0

2つのMySQLクエリがあります:

1) "SELECT ID,post_title,post_category,post_perma FROM ".TBL_POSTS."
   WHERE  published='1' AND page='0' ORDER BY  ID DESC LIMIT 10"

2) "SELECT p.cat_ID,p.cat_nicename FROM ".TBL_CATEGORIES." n, ".TBL_CATEGORIES." p
   WHERE n.lft BETWEEN p.lft AND p.rgt AND n.cat_ID='".post_category."' ORDER BY p.lft

最初のクエリは投稿を選択し、次にカテゴリのパスを選択します。最初のクエリから取得されることにpost_category注意してください。両方のテーブルで共通です。最初のテーブルでは名前が付けられ、2番目のクエリでは次のように名前が付けられます。post_categorypost_categorypost_categorycat_ID

今、私はそれをforeachループで実行していますが、これは良くありません。また、2番目のクエリもArrayを返し、1つの配列はに対応する必要があることに注意してください。post_category

SQLの専門家は私を助けてくれますか?

多くの感謝

4

2 に答える 2

4

参考になるかもしれませんので是非お試しください。

SELECT a.ID, a.post_title,a.post_category,a.post_perma, b.cat_ID, b.cat_nickname
FROM  (SELECT ID,post_title,post_category,post_perma FROM ".TBL_POSTS." WHERE  published='1' AND page='0' ORDER BY  ID DESC LIMIT 10)  a
LEFT   JOIN (SELECT p.cat_ID as cat_ID,p.cat_nicename as cat_nickname FROM " . TBL_CATEGORIES . " n, " . TBL_CATEGORIES . " p WHERE n.lft BETWEEN p.lft AND p.rgt AND n.cat_ID = '" .$post_category. "' ORDER BY p.lft) b ON a.ID = b.cat_ID
于 2012-10-19T10:29:59.193 に答える
0

LEFT JOINを使用します

このような:

$sql = "SELECT `p`.`ID`,`p`.`post_title`,`p`.`post_category`,`p`.`post_perma`,`c`.`cat_ID`,`c`.`cat_nicename` FROM `".TBL_POSTS."` AS `p` ";
$sql .= "LEFT JOIN `".TBL_CATEGORIES."` AS `c` ON `c`.`cat_ID`=`p`.`post_category` WHERE `p`.`published`='1' AND `p`.`page`='0' ORDER BY `p`.`ID` DESC LIMIT 10";

WHEREニーズに合わせて句を微調整する必要がある場合があります..

注:これは 1 つの文字列です。読みやすいように 2 行に分割しました。.=現在の文字列を追加することです。

于 2012-10-19T10:24:56.173 に答える