J'ai une base de données sql. Dans cette base de données il y a 3 tables que j'ai besoin d'interroger. La première table a toutes les informations de l'élément appelé item
et les deux autres tables a données pour les votes et les commentaires disant userComment
et le troisième pour les votes appelé userItem
sql question de déclaration. Besoin d'interroger 3 tables en une seule fois!
J'ai actuellement une fonction qui utilise cette requête SQL pour obtenir la dernière plus populaire (en termes de votes et commentaires):
$sql = "SELECT itemID, COUNT(*) AS cnt
FROM (
SELECT `itemID`
FROM `userItem`
WHERE FROM_UNIXTIME(`time`) >= NOW() - INTERVAL 1 DAY
UNION ALL
SELECT `itemID`
FROM `userComment`
WHERE FROM_UNIXTIME(`time`) >= NOW() - INTERVAL 1 DAY AND `itemID` > 0
) q
GROUP BY
`itemID`
ORDER BY
cnt DESC";
Je sais comment changer cela pour soit par votes seul ou commentaires ....
CEPENDANT - Je dois interroger la base de données pour retourner uniquement la itemID de ceux qui ont des conditions spécifiques dans seulement le item
ce tableau sont WHERE categoryID = 'xx' AND typeID = 'xx'
Si le ninja sql pourrait m'aider s'il vous plaît sur celui-ci? Dois-je d'abord retourner les résultats de la requête ci-dessus et le pour chaque dans le tableau récupéré puis vérifier chaque contre la table item
et voir si elle correspond aux conditions pour construire un nouveau tableau - ou est-ce exagéré?
Merci, Stefan
Doesnt semblent travailler? De quelles informations supplémentaires avez-vous besoin dont vous n'étiez pas sûr? les attributs tels que categoryID et itemID sont dans la table appelée 'item' où tous les éléments sont réellement stockés –
La jointure interne agit comme un filtre pour seulement les éléments avec des votes ou des commentaires. Changez-le en une jointure à gauche - est-ce que cela aide? –
Retourne: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'q.itemID = i.itemID WHERE i.categoryID =' 1 'ET i.typeID =' 1 'GROUP BY' à la ligne 10 - SELECT q .itemID, COUNT (*) AS cnt FROM (SELECT 'itemID' FROM' userItem' OERE FROM_UNIXTIME ('time')> = NOW() - INTERVAL 1 DAY UNION TOUT SELECT' itemID' FROM 'userComment' O WH FROM_UNIXTIME (' time ')> = NOW() - INTERVAL 1 DAY ET' itemID'> 0) q élément de jointure gauche i q.itemID = i.itemID O i i.categoryID = '1' ET i.typeID = '1' GROUP BY q. 'itemID' ORDER BY cnt DESC –