按列表排序SQL

时间:2013-06-04 09:10:02

标签: sql sql-order-by

以下是优惠壁纸代码的一部分:

...
    $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 列显示壁纸。虽然我需要按照他们喜欢的方式展示它们。数据存储在用户表格中,并为每个用户提供收藏夹列,其中包含优惠壁纸的ID列表。

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

有没有办法抓住这个tada并从中订购收藏?

1 个答案:

答案 0 :(得分:0)

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

  1. 阅读收藏夹列的值;
  2. 将其分解为数组;
  3. 遍历数组,查询数据库以按指定顺序获取收藏夹。
  4. 执行此类操作的常用方法是创建一个单独的表,例如user_favourites,每个用户的每个fovourite都有一行,其中包含用户ID和收藏ID - 在这种情况下,订单因素也是如此。通过这种方式设置数据库,您可以在新的user_favourites表上执行查询,其中user_id是用户ID,按“订购因子”排序,以一次性获得正确顺序的收藏夹。

    您使用的是哪个数据库?您可能能够执行类似

    的操作
    SELECT _whatever_
    FROM favourites
    WHERE favourite_id IN (SELECT favourites FROM users)
    

    并且可能以正确的顺序返回收藏夹。我认为额外的表格方法是优越的,如果你能这样做的话。