2015-06-28 39 views
0

我已經得到了以下的結果,當我試圖用MySQL來從數據庫讀取的結果命令行選擇類似的東西:SQL沒有類似上述在一個表中的同一列

+----+------+---------------------+ 
| id | full_name | club_name | 
+----+------+---------------------+ 
| 1 | Ahmed Sayed | El Ahly | 
+----+------+---------------------+ 
| 2 | Kareem Gaber | El Ahly | 
+----+------+---------------------+ 
| 3 | Wael Gamal | ENPPI  | 
+----+------+---------------------+ 
| 4 | Mohab Saeed | Petrojet | 
+----+------+---------------------+ 
| 5 | Kamal saber | Cocorico | 
+----+------+---------------------+ 
| 6 | Mohamed mezo | Ismaily | 
+----+------+---------------------+ 
| 7 | Mohamed gad | Ismaily | 
+----+------+---------------------+ 
| 8 | moaz maged | Smouha | 
+----+------+---------------------+ 

,但我有很多俱樂部名稱類似於上面

+----+------+---------------------+ 
| 1 | Ahmed Sayed | El Ahly | 
+----+------+---------------------+ 
| 2 | Kareem Gaber | El Ahly | 
+----+------+---------------------+ 

OR

+----+------+---------------------+ 
| 6 | Mohamed mezo | Ismaily | 
+----+------+---------------------+ 
| 7 | Mohamed gad | Ismaily | 
+----+------+---------------------+ 

,我曾嘗試使用ORDER BY RAND(club_name),它給了我這樣

防爆結果:

+----+------+---------------------+ 
| id | full_name | club_name | 
+----+------+---------------------+ 
| 1 | Ahmed Sayed | El Ahly | 
+----+------+---------------------+ 
| 2 | Kareem Gaber | Petrojet | 
+----+------+---------------------+ 
| 3 | Wael Gamal | ENPPI  | 
+----+------+---------------------+ 
| 4 | Mohab Saeed | El Ahly | 
+----+------+---------------------+ 
| 5 | Kamal saber | Cocorico | 
+----+------+---------------------+ 
| 6 | Mohamed mezo | Ismaily | 
+----+------+---------------------+ 
| 7 | Mohamed gad | Ismaily | 
+----+------+---------------------+ 
| 8 | moaz maged | Smouha | 
+----+------+---------------------+ 

所需的輸出將是:

+----+------+---------------------+ 
| id | full_name | club_name | 
+----+------+---------------------+ 
| 1 | Ahmed Sayed | El Ahly | 
+----+------+---------------------+ 
| 2 | Kareem Gaber | Petrojet | 
+----+------+---------------------+ 
| 3 | Wael Gamal | ENPPI  | 
+----+------+---------------------+ 
| 4 | Mohab Saeed | El Ahly | 
+----+------+---------------------+ 
| 5 | Kamal saber | Cocorico | 
+----+------+---------------------+ 
| 6 | Mohamed mezo | Ismaily | 
+----+------+---------------------+ 
| 7 | Mohamed gad | Cocorico | 
+----+------+---------------------+ 
| 8 | moaz maged | Smouha | 
+----+------+---------------------+ 

可以MySQL的做到這一點,或者我應該整合PHPMySQL的? 任何幫助將不勝感激。

回答

0

如果我理解正確,你想從俱樂部中選擇一個排序,所以沒有兩個相鄰的行有相同的俱樂部。

的近似值是交錯的俱樂部,你可以使用子查詢和變量做:

select p.* 
from (select p.*, 
      (@rn := if(@c = club, @rn + 1, 
         if(@c := club, 1, 1) 
         ) 
      ) as rn 
     from players p cross join 
      (select @c := '', @rn := 0) params 
     order by club 
    ) p 
order by rn, club; 

有些情況下,這是行不通的。但是如果你的俱樂部擁有類似數量的會員,那應該沒問題。

+0

感謝您的回覆,這正是我想要的,但你能告訴我,如果我有例如5類似的俱樂部名稱以上很多很多類似的俱樂部的名字呢?並請解釋你的mysql查詢。 –

+0

請問任何其他解決方案,如果我有很多成員在同一個俱樂部? –

+0

@authprivate。 。 。你能否提出另一個不平衡的樣本數據問題?解決方案可能會非常不同。 –

1

如果我理解正確,您不希望具有相同俱樂部名稱的球員會在結果集中出現一個接一個。

也許,你需要查詢如下:

SELECT p2.id, p2.full_name, p2.club_name 
FROM (
    SELECT 
     id, 
     @row_number := CASE 
      WHEN @clubName = club_name THEN @row_number + 1 
      ELSE 1 
     END AS sort_num, 
     full_name, 
     @clubName := club_name as club_name 
    FROM 
     players p1 
    ORDER BY p1.club_name 
) AS p2 ORDER BY p2.sort_num, p2.id; 

讓我試着解釋。您需要通過某個列來排列行,這些列將包含每個非唯一俱樂部名稱的唯一編號。 Oracle數據庫中有一個非常好的功能叫做ROW_NUMBER。不幸的是,MySQL沒有它。所以我們正在模擬它。

子查詢

SELECT 
    id, 
    @row_number := CASE 
     WHEN @clubName = club_name THEN @row_number + 1 
     ELSE 1 
    END AS sort_num, 
    full_name, 
    @clubName := club_name as club_name 
FROM 
    players p1 
ORDER BY p1.club_name; 

會產生以下結果:

+----+----------+--------------+-----------+ 
| id | sort_num | full_name | club_name | 
+----+----------+--------------+-----------+ 
| 5 |  1 | Kamal saber | Cocorico | 
| 1 |  1 | Ahmed Sayed | El Ahly | 
| 2 |  2 | Kareem Gaber | El Ahly | 
| 3 |  1 | Wael Gamal | ENPPI  | 
| 6 |  1 | Mohamed mezo | Ismaily | 
| 7 |  2 | Mohamed gad | Ismaily | 
| 4 |  1 | Mohab Saeed | Petrojet | 
| 8 |  1 | moaz maged | Smouha | 
+----+----------+--------------+-----------+ 

,請注意sort_num列。對於俱樂部名稱爲「El Ahly」的行,它有兩個不同的值1和2.現在我們所做的只是按此列進行排序。

最終結果:

+----+--------------+-----------+ 
| id | full_name | club_name | 
+----+--------------+-----------+ 
| 1 | Ahmed Sayed | El Ahly | 
| 3 | Wael Gamal | ENPPI  | 
| 4 | Mohab Saeed | Petrojet | 
| 5 | Kamal saber | Cocorico | 
| 6 | Mohamed mezo | Ismaily | 
| 8 | moaz maged | Smouha | 
| 2 | Kareem Gaber | El Ahly | 
| 7 | Mohamed gad | Ismaily | 
+----+--------------+-----------+ 
+0

感謝您的重播,但您的mysql查詢未顯示結果與以下結果相同或最終結果感謝您的努力。 –

相關問題