2016-06-21 3 views
-1

今、私はSQL応答から変数を必要以上に設定せずに設定しようとしています。より効率的な方法で単一の値を設定したMySQL行を取得する

私は、単一の値しか持たないuser_id列のSELECT + JOINクエリからSQL結果を得ています。他の列は行ごとに異なり、そのデータをループする必要があります。私は、user_id列から均一な値を抽出する方法があったのかどうか、whileループの変数に何度も何度も何度も何度も設定していないのだろうかと思っていました。

コード:

#where I would like the $user_id to be set 
while($responseArray = $response->fetch_assoc()){ 
    $userId = $responseArray["user_id"]; #what I don't want to do 
    #other fetching stuff 
} 

SQL:あなたは、少なくとも1つの結果行をフェッチから離れて取得することはできません

SELECT users.username, users.user_id, posts.post_id, posts.post_content, posts.number_comments, comments.comment_id, comments.comment_post_id 
FROM users 
JOIN posts 
JOIN comments 
WHERE delete_bit = 0 AND username = "john"; 
+0

のような愚かなものよりもはるかに良いだろう...しかし、私はあなたがWHERE句を使用することができるはずな感覚を持っています。 – nerdlyist

+0

SELECT users.username、users.user_id、posts.post_id、posts.post_content、posts.number_comments、comments.comment_id、comments.comment_post_idユーザーからの投稿JOINのコメントwhere_delete_bit = 0 AND username = "john"; – blastitall

+0

A)これは機能しますか?私は、JOINにそれと一緒に「ON」が必要であることをかなり確信しています。 B)どこに/ポスターがあるのですか? – nerdlyist

答えて

0

fetchOne()型の関数でさえこれを行います。しかし、単一行だけが必要な場合は、最初はループを使用するのがなぜですか?

$result = $db->query(...); 
$row = $result->fetchRow(); 
$value = $row['somefield']; 

はたぶん、私達にあなたのSQLを表示

$result = $db->query(...); 
while($row = $result->fetchRow()) { 
    $value = $row['somefield']; 
    break; 
} 
+0

私はそれを間違って入力した。同じ値の列があります。私の悪い。 – blastitall

+0

ループ外の値を設定することはできません**クエリからデータを取得するために行をフェッチする必要はありません。ループ外の行を取得してposterIDを取得した場合、その行の結果セットにある他のフィールドもすべてフェッチします.Window()ループの行が1つ少なくなったことを意味します。扱う。 posterIDがすべての行で同じであれば心配しないでください。同じ値を何度も何度も設定するという微視的なオーバーヘッドはそれを心配するものではありません。 –

+0

私は文体的に悪い選択だったと心配していました。私の脳では、ちょうど各反復を設定し続ける "ハック"のような感じでした。 – blastitall

関連する問題