カテゴリー商品の前後ページを取得する方法

このQ&Aのポイント
  • あるカテゴリーの商品詳細ページで前後詳細ページへのリンクを設けたいのですが、後ろページの取得は上手くいきますが、前のページの取得がうまくいきません。
  • カテゴリーと商品は別テーブルで関連付けテーブルで紐づけさせてます。PHP+MySQLで構築中です。
  • カテゴリーIDと商品IDを使用して、カテゴリーに関連する商品の前後の詳細ページを取得するSQL文の作成方法を教えてください。
回答を見る
  • ベストアンサー

カテゴリー商品の前後ページを取得する方法

あるカテゴリーの商品詳細ページで前後詳細ページへのリンクを設けたいのですが、 後ろページの取得は上手くいきますが、前のページの取得がうまくいきません。 カテゴリーと商品は別テーブルで関連付けテーブルで紐づけさせてます。 PHP+MySQLで構築中です。 ・カテゴリー関連付けテーブル(catgory_term) --------------- | category_id | id | --------------- ・商品テーブルテーブル(items) ----------------------- | id | title | url | ・・・・・・・・・ ----------------------- SQL文は下記のような感じです。(並び順でもSQL内容は変わります.。下記の例は商品ID降順) SELECT items.title,items.id,items.url,MIN(items.id) FROM category_term Left JOIN items ON category_term.id = items.id WHERE category_term.category_id = 'カテゴリーID' AND items.status = 'publish' AND items.id > '商品ID' お手数をおかけしますがご教授いただける幸いです。

  • AKG48
  • お礼率100% (1/1)
  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>後ろページの取得は上手くいきます であればソート順を逆にしてもう一度SQLを発行すればデータがとれるのでは?

AKG48
質問者

お礼

ありがとうございます! ソート順を逆にしてOKでした。 SQL文も見直し、少し手直しして下記通り変更しました。 SELECT items.title,items.id,items.url FROM category_term Left JOIN items ON category_term.id = items.id WHERE category_term.category_id = 'カテゴリーID' AND items.status = 'publish' AND items.id > '商品ID' ORDER BY items.id ASC LIMIT 1 お陰様でこれからスムーズに開発に取り組めそうです。 本当にありがとうございました。

関連するQ&A

  • 一度に関連する他のテーブルの行も取得したい

    MySQLバージョン4.1.16を使用しています。 ちょっとPHPも絡んでくるのですが、こちらのジャンルでお願いします。 テーブル「items」はテーブル「users」のuser_idカラムを 外部キーとして持っています。ここで「users」テーブルの行を取得して、 その値(user_idのaaaaやbbbbなど)を利用して 「items」テーブルのそれぞれ対応する行を取得したいのですが、 $users = (usersテーブルの行を取得するSQL文); $index = 0; foreach ($users as $row) { $users[$index]['items'] = (user_idに対応したitemsテーブルの行を取得するSQL文); $index++; } print_r($users); /* Array (  [0] => Array   (    [user_id] => aaaa    [items] => Array     (      [0] => Array       (        [user_id] => aaaa        [item_name] => アイテム1       )      [1] => Array       (        [user_id] => aaaa        [item_name] => アイテム2       )     )   )  [1] => Array   (    [user_id] => bbbb    [items] => Array     (      [0] => Array       (        [user_id] => bbbb        [item_name] => アイテム3       )     )   ) ) */ と、このように2段階に分けてやれば取得できるのですが、 そうではなくてこれを一度に取得できるSQL文というかやり方はあるのでしょうか? $users = (usersテーブルの行を取得するSQL文);←この段階でそれぞれ対応してるitemsテーブルの行まで取得したい

  • あるサイトの商品ページをすべて取得したい

    http://japan.webike.net/ ↑こちらのサイトの商品詳細ページのURLをすべて取得したいのですが、何か方法はありますか? 動的ページが生成されてしまうので、ソースが変わってしまいます。

  • カテゴリと個別商品の集計SQLについて

    カテゴリと個別商品の集計SQLについて質問です。 postgresのバージョンは9.0です。 次のテーブルより ------------------------------------------ id  カテゴリ  商品名    日付       値 ------------------------------------------ 1  野菜    ホウレン草  2010-01-01  100 2  野菜    ホウレン草  2010-01-02  100 3  野菜    ホウレン草  2010-02-02  100 4  野菜    キャベツ    2010-01-02  200 5  肉      牛肉      2010-01-01  500 6  肉      牛肉      2010-01-02  500 -------------------------------------------- 下の結果を得るSQLを考えています。 月毎の値の集計 カテゴリ  商品名     1月  2月    合計   カテゴリ合計  カテゴリ合計と合計との差 ----------------------------------------------------------------------------- 野菜    ホウレン草   200  100    300    500        200 野菜    キャベツ     200    0    200    500        300 肉      牛肉      1000   0    1000   1000         0 ----------------------------------------------------------------------------- ここでカテゴリの合計とは 上の場合、 ホウレン草(300)+キャベツ(200)=カテゴリ野菜(500)、です。 クロス集計とサブクエリを使えば出来そうなのですが、カテゴリ合計を出す部分の SQLが思いつきません、よろしくお願い致します。

  • 商品カタログ「この商品を買った人は、こんな商品も買っています」について

    はじめまして。 商品データベースのカタログ表示の際のSQLの質問です。 www.amazon.co.jp のサイトでは、ある商品を選択すると、「この商品を買った人は、こんな商品も買っています」と表示されます。 この内部的な処理方法を教えてください。 例えば、以下のような単純なテーブルがあるとします。 ●顧客テーブル ・顧客番号 ・顧客名 ●商品テーブル ・商品ID ・商品名 ・販売単価 ●注文テーブル ・注文番号 ・注文日時 ・顧客番号 ・小計 ●注文詳細テーブル ・注文番号 ・注文詳細番号 ・商品ID ・数量 このような設計の場合、「ある商品を買った人は、こんな商品も買っています」を実現するために ・バッチで裏で処理するのでしょうか?それとも注文のたびに処理するのでしょうか? ・どのテーブルに、保存するのでしょうか? ・どのようなSQL文になりますか?(具体的に教えてください) また、別の適切な設計方法があるのでしょうか? 困っています・・・ お手数ですがよろしくお願い致します。

  • wordpressのカテゴリ一覧ページについて

    wordpressでcategory.phpをカスタマイズしてカテゴリ一覧ページを作りたいのですが、下記のようなカテゴリ構造の場合 カテゴリ1(大カテゴリ)  LカテゴリA(中カテゴリ)   Lカテゴリ(1)(小カテゴリ)    L詳細ページ1    L詳細ページ2     カテゴリ2(大カテゴリ)  LカテゴリB(中カテゴリ)   Lカテゴリ(2)(小カテゴリ)    L詳細ページ1    L詳細ページ2 各カテゴリ一覧ページで (1)大カテゴリ一覧ページには中カテゴリへのリンクのみ表示 (2)中カテゴリ一覧ページには小カテゴリへのリンクのみ表示 (3)小カテゴリ一覧ページには各詳細ページへのリンクのみ表示 の3種類のページを作りたいのですが、 各カテゴリが可変の場合<?php in_category(ID);>は使えないと思うのですが、 wordpressで上記の条件に対応するテンプレートタグはあるのでしょうか? (例:子孫カテゴリがない場合の条件分岐や親カテゴリがない場合の条件分岐等) いろいろ調べましたが、該当するものが見つからず困っています。 どなたかご教授頂ければ、非常に助かります。よろしくお願い致します。

  • SQL文でのデータの取得が上手くいきません

    初めて質問させていただきます。 こちらのカテゴリで良いのか分からなかったのですが、よろしくお願いいたします。 SQL文を作成しているのですが、上手くいかず困っている状況です。 要件としてはテーブルAにユーザーの情報が格納されているのですが、 キーの一つとして世代(SEDAI_NO)(日付)を持っております。 今回取り出したいデータは該当ユーザーの処理日以前の最新のデータを 取得したいと思い以下のSQL文を作成しましたが、上手く行かず、最新世代を含むそれ以前の世代のデータを取得してきています。 どこがおかしいのでしょうか? よろしくお願いいたします。 【作成したSQL】 select * from テーブルA テーブルA’ where (USER_ID=該当のユーザーID) and (SEDAI_NO = (select max(SEDAI_NO) from テーブルA where SEDAI_NO = テーブルA’.SEDAI_NO AND 処理日 >= テーブルA'.SEDAI_NO)

  • JavaScriptにて、商品番号を検索して商品詳細ページを表示したい

    JavaScriptにて、商品番号を検索して商品詳細ページを表示したい WEBショップにて、商品番号を入力して検索し、該当する商品の詳細ページを表示するという様な事をJavaScriptでできるようにしたいと思っています。 現在利用しているサーバーでは、管理しているところに聞いたところ「CGI等の利用ができない」といわれています。なんとかJavaScript利用することでこれができないかと考えています。 Webでもサンプルとなるようなものはないかなど調べているのですが、私、全くの素人で、どれが一番良いものかもよくわかりません。 是非教えていただけないでしょうか。 ちなみに、入力する商品番号は「アルファベット1文字+数字2文字」の合計3ケタの番号。 呼び出したい商品詳細のページのURLには、予めシステム内のデータベースで割り振られた商品IDで構成され、URL内に商品番号に一致する部分は一切ありません。 私のイメージとしては、テキストファイルか何かで「商品番号」と「その商品の詳細ページURL」を記載したリストをサーバー上に置いておき、商品番号が入力されたら、上記のテキストファイルより入力された商品番号に該当するURLを読み込んで、商品詳細ページを別ウィンドウで開くような形になるのかなと思っていますが、このイメージがあっているかもよくわかりません。 是非ご教授、よろしくお願い致します。

  • group byにより集計した結果での名称取得方法

    次のようなテーブルがあったとして、一回のSQLで商品名称とその売上件数の一覧を作成することは可能なのでしょうか? 【売上テーブル】 ID 販売日 商品ID 0001 2011/01/01 1 0002 2011/01/01 2 0003 2011/01/03 1 0004 2011/01/10 1 0005 2011/01/12 2 ・・・ 【商品マスタ】 ID 商品名 1 りんご 2 みかん 3 いちご 【最終的に作成したい一覧】 商品名 件数 りんご 3 みかん 2 いちご 0 ※売上テーブルに存在しない商品についても、件数が0件として一覧に出力出来るようにしたいです。 select 商品ID from 売上テーブル group by 商品ID にて商品ID毎の件数を算出し、それとは別に select ID,商品名 from 商品マスタ として、商品IDと名称のリストを取得後、アプリにてこれらの情報を突き合わせれば実現できるのは分かるのですが、これらの処理を一回のSQLにまとめることは可能なのでしょうか? よろしくお願いします。

  • 2つのSQL文で結果に差違が発生する

    私の知識ではお手上げのため、ご教授願いたいのですが、 下記のようなテーブルが仮にあったとして、レコードがそれぞれいくつか入っています。 【itemsテーブル】   id・・・・・連番   cat_id・・・category.id   price ・・・価格   max_num ・・セット数   date・・・・発売日 【categioryテーブル】   id・・・・・連番   cat_name・・カテゴリ名 【orderテーブル】   id・・・・・連番   item_id ・・items.id   paid_price・支払価格 以下の2つのSQL文を実行させた場合、「total_price」の値に違いは発生しますか? 【SQL文 A】----------------------------- SELECT items.cat_id, `category`.`cat_name`, SUM(`items`.`price` * `items`.`max_num`) AS `total_price`, SUM(IF(`order`.`paid_price` > 0, `order`.`paid_price`, 0)) AS `total_paid`, SUM(IF(`order`.`paid_price` = 0 , `items`.`price`, 0)) AS `not_payment` FROM `items` INNER JOIN `category` ON (`items`.`cat_id` = `category`.`id`) INNER JOIN `order` ON (`items`.`id` = `order`.`item_id`) WHERE DATE_FORMAT(`items`.`date`, '%Y%m') = 201511 GROUP BY `items`.`cat_id` ORDER BY `items`.`cat_id` ASC ------------------------------------ 【SQL文 B】----------------------------- SELECT items.cat_id, `category`.`cat_name`, SUM(`items`.`price` * `items`.`max_num`) AS `total_price` FROM `items` INNER JOIN `category` ON (`items`.`cat_id` = `category`.`id`) WHERE AND DATE_FORMAT(`items`.`date`, '%Y%m') = 201511 GROUP BY `items`.`cat_id` ORDER BY `items`.`cat_id` ASC ------------------------------------ こちらで上記と同じようなSQL文を実行すると、Bで出てほしい値がAでは出てこないのです。 Aの場合は「WHERE DATE_FORMAT(`items`.`date`, '%Y%m') = 201511」が抽出条件として実行されていないような感じです。 すべてのレコードの「SUM(`items`.`price` * `items`.`max_num`) AS `total_price`」が計算されています。 Bだけで実行すればちゃんとほしい値が返ってきます。 何か間違っていますか?

    • ベストアンサー
    • MySQL
  • Excelワークシート上にSQL文を書き込み取得したデータをワークシート上に取得

    はじめましてこんにちわ。 現在ExcelとSQLServerでADOを使ってデータを取得したいと思っています。 SQL文をワークシート上に書いてそれを読み込んでSQL文を実行するようにしたいのですが、それを取得したあと、データをExcelワークシートに表示させる方法が思いつきません。 SQL文で指定するデータは任意の文です。そのため取得されたフィールドがいくつできるかわからない状態です。 例えば、SQL文であったら SELECT 商品ID,商品名,価格 from 商品テーブル なりますが、商品ID,商品名,価格フィールドを自動的に Excelフォーム上に作りたいということです。 ・基本的にSELECT文しか使わない ・SQL文は任意のSQL文である の条件がありますがそれはできるのでしょうか? よろしくお願いします。