0

フィードバックと時間を割いていただき、本当にありがとうございます。

データベース with1 テーブルにクエリを実行する PHP ページに取り組んでおり、スタックしているようです。SQL は私の得意分野ではないので、助けを求めています。私はMYSQLが添付されたPHPで作業しています。

データベース

次を含むテーブル「製品」があります。

1ID, 2Product Description, 3Price, 4Category, 5Size, 6Price-Category

クエリを実行して、サイズ (完全一致) と価格カテゴリ (同等またはそれ以上) で一致する製品を特定したいと考えています。そのため、次のプロセスを考えました。

A - run queries to identify different products by Category (one for Category A, one for Category B)
B - compare query A and B by Size and Price-Category
C - Display Results by ID for Category A

Query A Product の ID ごとに結果を出力したいと思います。

1ID|2Product Description|3Price|4Category|5Size|6Price-Category|7Query B Details
1   Product              100    Cat       100   1               ID, Product. etc.
                                                                ID, Product. etc.
                                                                ID, Product. etc.

2   Product              200    Cat       100   2               ID, Product. etc.
                                                                ID, Product. etc.
                                                                ID, Product. etc.

これをどのように構築できるかについてのアイデアはありますか?

前もって感謝します!

これまでに試したコード(現在、2つのテーブルから取得しようとしていますが、元々は1つにありました!!!!)

$query = "SELECT betten.m3, betten.Shortcode, betten.CodePDT, betten.PVCons, betten.CAT, betten.size1, betten.size2, betten.m3, betten.SIZE, betten.PRICERANGE, som.CodePDT2, som.Shortcode2, som.PRICECLASS, som.PVCons2, som.CAT2, som.size1a, som.size2a, som.m3a, som.SIZETWO FROM betten LEFT JOIN som ON betten.m3 = som.m3a ORDER BY CodePDT ";  
        $result = mysql_query($query) or die(mysql_error());
        // Print out the contents of each row into a table 
        while($row = mysql_fetch_array($result)){
            echo "<tr><td>";
            echo $row['CodePDT']. "</td><td>".$row['Shortcode']. "</td><td>". $row['PVCons']."</td><td>". $row['CAT']. "</td><td>". $row['SIZE']. "</td><td>". $row['m3']."</td><td>". $row['PRICERANGE']. "</td><td>". $row['CodePDT2']. "</td><td>". $row['Shortcode2']. "</td><td>". $row['PVCons2']. "</td><td>". $row['CAT2']. "</td><td>". $row['SIZETWO']. "</td><td>". $row['m3a']. "</td><td>". $row['PRICECLASS']. "</td><td>";
            echo "</td></tr>";
        }

アップデート:

GROUP_CONT を除いて、これは機能します。なしで、結果は得られますが、行ごとです。GROUP_CONT を使用すると、「'GROUP_CONCAT(som.S....) の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください」というエラーが表示されます。

SELECT `betten`.*, `som`.*
FROM betten
    LEFT JOIN som ON betten.m3 = som.m3a    
    WHERE SIZE LIKE SIZETWO    
GROUP_CONCAT(som.Shortcode2) AS Dude
    GROUP BY betten.CodePDT    
    ORDER BY CodePDT ASC
4

1 に答える 1

0

次の方法で達成:

$query = ("SELECT
    r.rangename as rRangename,  /* Get Ranges from Rangetable */
    r.rangevalue as rRangevalue,
    m.name as mName, /* Get Fields from main Products */
    m.Code as mCode,
    m.Range as mRange,
    SUBSTRING_INDEX(GROUP_CONCAT(f.productcode ORDER BY f.index_id ASC SEPARATOR ','),',',3) as fCodes, /* Get Fields from Cross Selling and list them seperatly */
    SUBSTRING_INDEX(GROUP_CONCAT(f.name ORDER BY f.index_id ASC SEPARATOR ','),',',3) as fNames,
    SUBSTRING_INDEX(GROUP_CONCAT(f.range ORDER BY f.index_id ASC SEPARATOR ','),',',3) as fRanges

FROM
    crossproducts f
JOIN /* Match main products with cross via m3 */
    mainproduct m
ON
    m.m3 = f.m3 
JOIN /* Match ranges and assign values for cross */
    ranges r
ON
    r.rangename = f.range
JOIN /* Match ranges and assign values for main */
    ranges s
ON
    s.rangename = m.Range
WHERE /* Only get Items that are equal or higher price range */
    r.rangevalue - s.rangevalue > -1

GROUP BY /* And finally group them by main Product Code */
    m.Code;");
于 2012-05-16T17:07:24.710 に答える