0

以下是收藏壁纸的部分代码:

...
    $profile = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id = $id"));
    }

    if ($profile['favourites'] != '') {
        $from = (($page * $template['fav_wallpaper_limit']) - $template['fav_wallpaper_limit']);

        $favourites = substr($profile['favourites'], 2);

            /// Tried to join 2 tables, but favourites still displayed by wallpaper id 
        $sql = mysql_query("
            SELECT
            * 
            FROM 
            wallpapers AS w
            JOIN favourites AS f on f.wallpaper_id = w.id
            WHERE
            w.id IN ($favourites) AND w.published = 1
            ORDER BY 
            f.wallpaper_id LIMIT $from, $template[fav_wallpaper_limit]");
            ");

问题是,它通过存储在壁纸表中的id列显示壁纸。虽然我需要通过他们最喜欢的穿着方式来展示它们。数据存储在users表中,并为每个用户提供列收藏夹,其中包含收藏壁纸的 id 列表。

示例:, 90, 2031, 1, 34, 460, 432, ..., 2013;

有没有办法抓住这个 tada 并从中订购最爱?

4

1 回答 1

0

我认为您需要在 PHP 代码中执行此操作:

  1. 读取收藏栏的值;
  2. 将其分解成一个数组;
  3. 遍历数组,查询数据库以指定顺序获取收藏夹。

做这种事情的通常方法是有一个单独的表,比如user_favourites每个用户的每个 fovourite 都有一行,其中只包括用户 id 和最喜欢的 id - 在这种情况下,还有一个顺序因素。以这种方式设置数据库后,您可以在新user_favourites表上执行查询,其中 user_id 是用户 ID,按“顺序因子”排序,以便一次性以正确的顺序获取收藏夹。

您使用的是哪个数据库?你也许可以做类似的事情

SELECT _whatever_
FROM favourites
WHERE favourite_id IN (SELECT favourites FROM users)

可能会以正确的顺序返回收藏夹。我认为附加表格方法更好,如果你能这样做的话。

于 2013-06-04T09:23:57.867 回答