0

所以我有2张桌子:

user_selection (id, user_id, fiche_id)
fiche (id, title, ...)

(菲希 = 表)

我有一个研究请求,它给了我一些 fiche id

SELECT fiche.*, IF(fiche.fiche_type_id = 2,fiche.instance,fiche_type_texte.type_texte) AS type_texte, IF(fiche.fiche_type_id = 2,CONCAT(fiche.affaire," - ", fiche.titre),fiche.titre) AS titre, IF(fiche.fiche_type_id = 1,fiche.date_publication,fiche.date_texte) AS date_publication
FROM enviroveille_bascule.fiche
LEFT JOIN enviroveille_bascule.fiche_type_texte ON(fiche.fiche_type_texte_id = fiche_type_texte.id)
LEFT JOIN enviroveille_bascule.fiche_x_keyword ON(fiche_x_keyword.fiche_id = fiche.id)
LEFT JOIN enviroveille_bascule.fiche_x_theme ON(fiche_x_theme.fiche_id = fiche.id)
LEFT JOIN enviroveille_bascule.fiche_echeance ON(fiche_echeance.fiche_id = fiche.id)
LEFT JOIN enviroveille_bascule.fiche_x_activite ON(fiche_x_activite.fiche_id = fiche.id) LEFT JOIN enviroveille_bascule.fiche_x_nomenclature ON(fiche_x_nomenclature.fiche_id = fiche.id)
WHERE 1 = 1
AND fiche_echeance.fiche_echeance_type_id IN(2)
GROUP BY fiche.id

我想知道我的研究查询的所有结果是否都在用户选择中。

所以我尝试了:

// fiche_ids is an array of fiche.id resulting from research request 
SELECT COUNT(*) AS nb
FROM " . $this->bdd . $this->table_user_selection . "
WHERE user_id = '" . $user->datas_user['id'] . "'
AND fiche_id IN ('" . implode("','", $fiche_ids) . "')

    if($ds['nb'] == count($fiche_ids) && count($fiche_ids) > 0) {
        return true;
    } else {
        return false;
    }

效果很好

问题是我有一些研究请求给出了 10K+ 的结果。而且我必须在同一个页面上做几次,这使得服务器滞后。

有没有一种简单的方法可以知道我的所有结果是否都在我的选择中?请注意,选择可能包含比研究结果更多的 fiche_id。

最好的办法是能够在一个 SQL 请求中执行此操作。

4

0 回答 0