J'ai trois tables avec ces domaines:requête SQL avec UNION, SELECT et assemblez
product_views
: ProductMasterID, Date
product_clicks
: ProductMasterID, Date
product_master
: ProductMasterID, Category
quelqu'un Anytime voit un produit sur mon site, il ajoute une ligne à product_views
. Quand quelqu'un clique sur un produit sur mon site, il ajoute une ligne à product_clicks
J'essaye d'écrire une requête SQL (en MySQL/PHP) qui va me montrer la popularité des produits. La popularité est le nombre de fois qu'il a été consulté et cliqué ensemble. Je veux être en mesure de choisir aussi une plage de dates, et dans une certaine catégorie.
Je peux le faire fonctionner sans les contraintes de date/catégorie. J'essaye maintenant d'ajouter dans la gamme de date. Voilà ce que j'ai jusqu'à présent, la popularité de la dernière semaine:
SELECT *, COUNT(*) AS Popularity FROM
(SELECT product_views.ProductMasterID, product_views.Date
FROM product_views
WHERE product_views.Date BETWEEN '".date('Y-m-d',strtotime('now'))."'
AND '".date('Y-m-d',strtotime('-7days'))."'"."
UNION ALL
SELECT product_clicks.ProductMasterID,product_clicks.Date
FROM product_clicks
WHERE product_clicks.Date BETWEEN '".date('Y-m-d',strtotime('now'))."'
AND '".date('Y-m-d',strtotime('-7days'))."'".") a
GROUP BY ProductMasterID ORDER BY Popularity DESC LIMIT 100"
Sauf qu'il travail ne marche pas, il ne donne aucun résultat. Cependant, si je supprime l'une des clauses WHERE
, cela fonctionne pour une raison quelconque, mais j'ai besoin des deux. Mes questions sont les suivantes:
- Comment faire fonctionner avec les deux clauses
WHERE
- Comment faire la partie de la catégorie par exemple sélectionner uniquement les produits qui ont une catégorie de «nourriture». Je pense que je devrais faire un joint quelque part avec la table
product_master
, mais semble rusé.
Toute aide serait grandement apprécié.
Merci
Je suppose une faute de frappe, mais quand quelqu'un clique sur un produit doit-il pas ajouter une ligne à 'product_clicks' au lieu de' product_views'? –
@ user1986985 pourquoi voulez-vous avoir un syndicat ici?Puisque votre plage de dates est la même, vous pouvez joindre deux tables? – bonCodigo
Désolé pour la réponse tardive, je pensais que je m'étais inscrit à l'alerte e-mail, et recevrait un e-mail lorsque quelqu'un a répondu à cela, mais n'a rien reçu! Kevin, oui un type, l'a corrigé. bonCodigo, je regarde votre code maintenant, je verrai si je peux le faire, puis je reviendrai vers vous. Merci – user1986985