2017-01-13 5 views
0

「イベントID」が「ユーザID」と一致するたびに、「イベント」テーブルからすべてのデータを選択しようとしています。しかし、私はエラーが発生します1242副問合せは1行以上を返します。MySQLサブクエリエラー:サブクエリが1行以上を返します

$query = "SELECT * FROM events WHERE id = (SELECT event_id FROM booking_dates WHERE user_id = '{$user_id}')"; 
$event_set = mysqli_query($connection, $query); 

ユーザーが複数のイベントに参加できるため、サブクエリが複数の行を返すことを理解しています。だから私のクエリは複数の行を受け入れることができますか?

+0

あなたは私たちにbooking_datesやイベント構造、または少なくともその関連性を示すことができました。あなたは[パラメータ化クエリを使用する必要がありますmysqli' '使用の場合:あなたは、JOIN INNERにして解決する必要があります。http://dev.mysql.com/doc/refman/5.7/en/join.html –

+0

** WARNING ** (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)および[ 'bind_param'(http://php.net/manual/en/mysqli-stmt.bind-param .php)を使用してユーザーデータをクエリに追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

答えて

1

あなたはinを使用することができます。

SELECT * FROM events 
WHERE id IN (SELECT event_id FROM booking_dates WHERE user_id = '{$user_id}') 

警告:あなたのSQLでそのような注入の文字列は、SQLインジェクションにそれらが脆弱になります。この脆弱性なしでbind argumentsにアクセスできるprepared statementsをご覧ください。

0

クエリには、IN演算子をwhereと一緒に使用する必要があります。

$query = "SELECT * FROM events WHERE id IN (SELECT event_id FROM booking_dates WHERE user_id = '{$user_id}')"; 
$event_set = mysqli_query($connection, $query); 

http://www.w3schools.com/sql/sql_in.asp

0

私は、SQLの専門家ではないと、このような私の構文として少しずれることがあり。しかし、私は何を探していることはIN句であると考えている:

$query = "SELECT * FROM events WHERE id IN (SELECT event_id FROM booking_dates WHERE user_id = '{$user_id}')"; 
$event_set = mysqli_query($connection, $query); 
0

他の人があなたの構文を修正する方法を示しています。しかし、WHERE column IN (subquery)ではなく、JOINを使用すると、MySQLのパフォーマンスは向上します。

SELECT DISTINCT e.* 
FROM events AS e 
JOIN booking_dates AS b ON e.id = b.event_id 
WHERE b.user_id = '$user_id' 
0

"クエリを複数行にするにはどうすればよいですか?"

USE a booking_datesテーブルへの適切な結合を持つSelect。 RIGHT JOINの理由は、eventidと指定されたユーザーに対して有効なbooking_Dateレコードが1つ以上ある場合のみ、イベント表のレコードを表示することです。あなたのSQLクエリはパラメータを使用して結合「清め」されていることを確認するためにその上にもベストプラクティスを推奨されているように

$query = " 
SELECT 
    * 
FROM 
    events e 
RIGHT JOIN 
    booking_dates bd 
    ON e.id=bd.event_id 
WHERE 
    bd.user_id = '{$user_id}'"; 
$event_set = mysqli_query($connection, $query); 

: は、私は複数の行を達成し、唯一のコードは次のように見ていることになりますデータを表示するようにと考えています。 このスタックオーバーフローリンクが答えを提供します。 (もしあれば) parameters in MySQLi

関連する問題