2016-12-28 10 views
0

のプロパティを取得するためにGETしようが、私はエラー、事前に感謝取得BY私はグループを追加する場合:PHP:私、GROUP BYを追加すると、エラーが私のコードの仕事は完璧こんにちは非オブジェクト

$sql_query = $connection->query("SELECT * FROM `chat` WHERE `sent_to` = '1'");-Work perfect 
$sql_query = $connection->query("SELECT * FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`");- Not Work 
Notice: Trying to get property of non-object 

はコード:

$sql_query = $connection->query("SELECT * FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`"); 

if($sql_query->num_rows > 0) { 
    while ($fetch_data = $sql_query->fetch_array(MYSQLI_ASSOC)) { 
     echo $fetch_data["text"]. "</br>"; 
    } 
} 

表:失敗した場合はfalseを返すmysqliのHERE

CREATE TABLE IF NOT EXISTS `chat` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `sent_by` int(11) NOT NULL DEFAULT '0', 
    `sent_to` int(11) NOT NULL DEFAULT '0', 
    `user_id` int(11) NOT NULL DEFAULT '0', 
    `text` text COLLATE utf8mb4_general_ci NOT NULL, 
    `seen` enum('0', '1') NOT NULL DEFAULT '0', 
    `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1; 
+0

'GROUP BY'は集計用です。あなたは' ORDER BY'を探していませんか? – Uueerdo

+0

@Uueerdoいいえ、私は同じメッセージのためにgrupが必要です –

+0

私はテーブルを作成してクエリを実行しました__SELECT * FROM 'chat' WHERE' sent_to' = '1' GROUP BY 'sent_by'__ –

答えて

3

。つまり、クエリごとのグループが失敗したことを意味します。これはあなたが使用していることを意味します。mysql 5.7

MySQL 5.7.5以降では、機能的依存の検出が実装されています。 ONLY_FULL_GROUP_BY SQLモードが有効になっている場合(デフォルトでは) 選択リストHAVING条件、または ORDER BYリストが、 GROUP BY句にも名前も付けられていない集約されていない列を参照するクエリも拒否されます。機能的にそれらに依存する。 ( 5.7.5前に、MySQLは機能的な依存関係を検出していないとONLY_FULL_GROUP_BYは、デフォルトでは有効になっていません。 前5.7.5動作の説明については、MySQL 5.6リファレンスマニュアルを参照してください。)つまり

をしようとしているクエリが無効なSQLです。 Mysqlでは5.7までこのようなクエリを実行することができましたが、もはやそれはありません。しかし、ANY_VALUE機能を使用して実行することも、FULL_GROUP_BYを無効にすることもできます。しかし、それは依然として、Fredによって指摘されたように、あなたのクエリを無効なSQLにします。

唯一の実際の解決策は、クエリを変更することです。たとえば、次のように動作します。

SELECT sent_by FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by` 

あなたは明らかにテキスト列を取得しようとしています。したがって、ANSI SQLに準拠したクエリの場合、少しの作業が必要です。

SELECT a.sent_by, a.`text` FROM chat a INNER JOIN (
    SELECT sent_by FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`) AS B ON a.sent_by = b.sent_by and a.sent_to = 1 
+0

私は自分のコードの仲間を働かせることができますか?ありがとう! ? –

+0

それは私の答えにあります。ONLY_FULL_GROUP_BYを無効にするか、ANY_VALUEを使用するか、クエリを変更してください。 – e4c5

+0

@ e4c5ええ、その文書には次のように書かれています:* "SQL92ではクエリが合法的であるために名前列を選択リストから省略するか、GROUP BY句で指定する必要があります。 *したがって、 'SELECT *'はここでの犯人です。 –

関連する問題