私はアフィリエイトプログラムのデータフィードスクリプトに取り組んでいて、本当に「やった」と思っていましたが、スクリプトを実行すると、28の製品のうち7つだけでCSVファイルが作成されます。テストの前に、すべての製品がクエリの条件を満たすようにしたので、すべてを含める必要があります。在庫レベルと価格の条件も削除しました。それでも、28のうち7つだけが1つのカテゴリから5つ、もう1つのカテゴリから2つがcsvファイルに追加されます。最初のカテゴリには5つの製品しかなく、それらすべてが返品されます。ただし、2番目のカテゴリの23のうち2つだけが返されます。
目標は、クエリのカテゴリからすべての製品の特定のデータを取得し、それらをcsvファイルにダンプすることです。
より複雑なSQLクエリを作成しようとするのはこれが初めてです(とにかく初心者向け)。
print_rを使用すると、問題はクエリにあることがわかりました。私は以前にこれが機能していたと思いました。それが機能していたときと現在の違いは、categoryidとcatparentidを取得することを含めたことです。ただし、これらの追加を削除しても、同じ結果が得られます。以前は、より大きな製品データベースで機能していたと思っていたかもしれませんが、実際にはすべての製品が返されていなかったのかもしれませんが、非常に多くの製品が返されていると思いました。
完全なスクリプトはかなり長いですが、クエリがすべてのレコードを取得しているかどうかを確認するために、以下に新しいスクリプトを作成しました...そうではありません。:(
関連付けられていない製品(つまり、カテゴリの関連付けがない製品)を確認するためにクエリを実行すると、すべての製品がカテゴリに関連付けられます。
すべての商品にイメージとブランドの関連性があるので、それも問題ではないと思います。
Where句を完全に削除しても、7つの製品のみが取得されます。
また、データベース内で直接クエリを実行し、同じことを取得しました。
Showing rows 0 - 6 ( 7 total, Query took 0.0029 sec)
SELECT isc_products.productid, isc_products.prodcode, isc_products.prodname, isc_products.produrl, isc_products.prodcalculatedprice, isc_products.proddesc, isc_products.prodcurrentinv, isc_products.upc, isc_categories.categoryid, isc_categories.catparentid, isc_categories.catname, isc_product_images.imagefilestd, isc_product_images.imagefilethumb, isc_brands.brandname
FROM isc_products
INNER JOIN isc_categories ON isc_products.prodcatids = isc_categories.categoryid
INNER JOIN isc_product_images ON isc_products.productid = isc_product_images.imageprodid
INNER JOIN isc_brands ON isc_products.prodbrandid = isc_brands.brandid
WHERE isc_categories.categoryid =10
OR isc_categories.categoryid =12
この問題の原因となる特殊文字がデータに含まれている可能性はありますか?
または、内部結合を誤って使用していますか?
<pre>
<?php
// Make a MySQL Connection
mysql_connect("localhost", "myusername", "mypassword") or die(mysql_error());
mysql_select_db("mydatabase") or die(mysql_error());
$result = mysql_query("SELECT isc_products.productid,
isc_products.prodcode,
isc_products.prodname,
isc_products.produrl,
isc_products.prodcalculatedprice,
isc_products.proddesc,
isc_products.prodcurrentinv,
isc_products.upc,
isc_categories.categoryid,
isc_categories.catparentid,
isc_categories.catname,
isc_product_images.imagefilestd,
isc_product_images.imagefilethumb,
isc_brands.brandname
FROM isc_products
INNER JOIN isc_categories
ON isc_products.prodcatids = isc_categories.categoryid
INNER JOIN isc_product_images
ON isc_products.productid = isc_product_images.imageprodid
INNER JOIN isc_brands
ON isc_products.prodbrandid = isc_brands.brandid
WHERE isc_categories.categoryid = 17
OR isc_categories.categoryid = 15
OR isc_categories.categoryid = 16
OR isc_categories.categoryid = 12
OR isc_categories.categoryid = 13
OR isc_categories.categoryid = 14
OR isc_categories.categoryid = 11
OR isc_categories.categoryid = 10
AND isc_products.prodcurrentinv > 1
AND isc_products.prodcalculatedprice > 1.00
ORDER BY isc_categories.catname
")
or die(mysql_error());
while($row = mysql_fetch_array( $result)){
print_r ($row);
}
// end of file
echo '<br/>****** Script successfully run! ******';
?>
</pre>
これについての考えをいただければ幸いです。あなたの最初の考えが「なぜあなたはしなかったのか...」であるなら、それは私がそれについて知らなかったか、知らなかったからです。:)ある日、私の友人...いつか私はそうします。ハハハッハッハ
ありがとうございました!