2011-07-17 9 views
1

データベースからデータを取得しようとしていますが、特定のユーザが最後にチェックした場合はchecked="checked"時間...mysqlの2つのテーブルからデータを取得すると、ここでは機能しません

私は2つのテーブルを持っています.1つは、専門名と専門IDを持つ専門テーブルです。

他の一つは

事はして、私はすべての専門の完全なリストを取得することはできませんが...ユーザーID(UID)と専門ID(SID)を持っているuser_specialties、ありますuser_specialtiesからのデータを、対応する - と確認するためにチェックボックスのか分からない...

私は次のことを試してみました:

function genspecialties($id = 0) { 
    $query = "select * from specialties s RIGHT JOIN user_specialty us on s.id = us.sid "; 

の人が持っているように、このクエリは私に何回も同じ専門を取得しますそれは、各ユーザーのために同じ専門分野を何度も繰り返します...行かないOD:

$query = "select * from specialties s RIGHT JOIN user_specialty us on s.id = us.sid where us.uid = '$id' "; 

しかし、それは唯一のユーザーが持っている料理を持ち帰った、と彼はないものをスキップ(もちろん)として、これは、どちらかのよくありませんでした:/

ので、私は多分考えました....

だから、どのように私はすべての専門を得ることができ、誰かが考えているかもしれないと、ユーザーがそれを持っているかどうかの参照? PHPでmysqlを使用しています... ありがとう! ヤニパン

答えて

1

私が正しく理解している場合、これはあなたが必要なものを行う必要があります:あなたの要求ごと

$result = mysql_query("SELECT (specName, (IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))) FROM specialities s;"); 
while (list($spec, $checked) = mysql_fetch_array($result)) { 
    // Do your outputting here. 
} 

編集

を、私は先に行くと、クエリを説明します。おそらくあなたを混乱だ部分が、このサブクエリさ:

(IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1)) 

IF EXISTSは、一部はすぐにそれが(結果が含まれている)「が存在する」は次の場合にTRUEまたはFALSEを返すようにMySQLを伝えます。 SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1は、user_specialtys.id = us.sid(specialty IDと一致する))とus.uid = '$id'(そのIDはユーザーのもの)の行を検索するようにMySQLに指示します。

+0

こんにちはEdoDodo、興味深い質問に感謝します。それでもいくつかのMySQLエラーが発生していますが、私がそれを使用することができたかどうかをお知らせします:) – Yanipan

+0

こんにちは、ありがとう、それは素晴らしい!今私は構文を理解する必要があるので、次回使用することができます:) – Yanipan

+0

私は簡単な説明を追加しました。あなたがまだ理解していないものがあれば教えてください。 – EdoDodo

1

あなたが必要とするすべてのツールがあると思います。

チェックボックスを作成しているところでは、単にチェックされていない状態でtehmを作成し、結果セットを渡してチェックする必要があるかどうかを確認し、チェックするだけです。

+0

こんにちはランディさん、素早い対応をありがとうございます。私はそれを行うことができますが、edododo提案のようなよりエレガントなものを望んでいた - 私はそれを働かせることができます:もしそうでなければ、私は多くのあなたのアイデアを続けます簡単に... – Yanipan

1

これは必要なものです。 3番目のフィールドはチェックされていないかNULLです。

$result = mysql_query("SELECT s.id, s.name, (SELECT 'checked' FROM specialties AS s2 JOIN user_specialties AS us ON s2.id = us.sid WHERE uid = '$id' AND s.id = s2.id) AS checked FROM specialties AS s;") 
+0

あなたは正しいです、それはexectly私が必要としていた、箱から働いた...ありがとう:) – Yanipan

関連する問題