1

私はphpとmysqlに非常に慣れていません。私は行くにつれて学ぼうとしていますが、この問題で立ち往生しています。

私は多対多の関係を持っています。テーブルは、users と state です。users テーブルの多くの会社は多くの州で運営されており、各州にはさまざまな会社があります。ユーザー テーブルの各会社には、状態テーブルに格納されている一意の ID があります。州テーブルには、会社が運営されている州名の列があります。会社が属している州ごとに、州テーブルに新しい行が作成されます。これで問題ないようです。

次の PHP コードを作成して、特定の州 ($state) の州テーブルからすべての会社 ID を取得し、特定の州で動作するすべての会社名 (会社 ID を使用してユーザー テーブルから取得) を表示します。

私の問題は、特定の州で事業を行っている企業のリストをアルファベット順に並べたいということです。このコードはそれを行いません。リストを順序付けできるようにする(または、一般的にはより効率的で優れた)これを行うためのより良い方法を誰かが提供できますか?

$state=$_GET['state'];
echo $state;
$aid=array();
$result=mysql_query("SELECT * FROM state WHERE state='$state'");
while($row=mysql_fetch_assoc($result)){
$v=$row['company_id'];
array_push($aid,$v);};

foreach($aid as $val){
$result1=mysql_query("SELECT * FROM users WHERE company_id='$val'");
$row1=mysql_fetch_assoc($result1);
$company=$row1['company'];
echo $company.'<br/>';};

テーブル構造は次のとおりです。

ユーザー

company_id
company
(other columns that are not relevant)

index
company_id
state
(no additional columns)
4

3 に答える 3

2

通常、リレーショナル データベースに 3 番目のテーブルを導入して、多対多の関係を表現します。テーブルは users_states で、フィールドは us​​er_id と state_id のみです。したがって、テーブルはおそらく次のようになります。

SQLでソートを行います。したがって、クエリは次のようになります。

SELECT u.*, s.*
FROM users AS u
INNER JOIN users_states AS us ON u.user_id = us.user_id
INNER JOIN states AS s ON us.state_id = s.state_id
WHERE s.state_id = ?
ORDER BY u.name ASC

ここでは、フィールドnameが並べ替えの基準であり、state_id に渡された値でフィルタリングすると仮定しています。

于 2012-09-06T19:23:14.743 に答える
1

この URL を参照してください:-

多対多の関係の選択と並べ替え

おそらくこれに似たもの:

SELECT
    a.person_id
FROM
    table AS a,
    table AS b
WHERE
    a.person_id = b.person_id AND
    a.favorite_id = 1 AND
    b.favorite_id = 2
ORDER BY
    ( IF( a.is_main_favorite = "y", 1, 0 )
      +
      IF( b.is_main_favorite = "y", 1, 0 ) ) DESC

ところで、IF 呼び出しが不要になるように、y/n の代わりに 1/0 をデータベースに格納することもできます。

于 2012-09-06T19:15:30.920 に答える
0

次のSQLステートメントを試してください。

SELECT 
    s.state, u.company 
FROM 
    states s, users u 
WHERE 
    s.company_id = u.company_id 
AND 
    s.state = "$state" 
GROUP BY 
    s.state 
ORDER BY 
    s.state, u.company

これにより、選択した州ごとの企業のアルファベット順のリストが表示されます。クエリを拡張して複数の状態を取得する場合は、ORDERBYが最初に状態を使用します。

于 2012-09-06T19:20:32.480 に答える