3

サイトのメールのゴミ箱セクションを整理しようとしていますが、面倒です。以前はクエリに問題があり、最終的に機能するようになりましたが、ページネーションも問題を引き起こしています。このエラーが発生しています

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Arken\pagination\function.php on line 9
SELECT COUNT(*) as `num` FROM user_inbox WHERE user_inbox.receiver_user_id='4' AND user_inbox.mail_deleted ='1' UNION SELECT * FROM user_outbox WHERE user_outbox.sender_user_id='4' AND user_outbox.mail_deleted ='1'

The used SELECT statements have a different number of columns

9行目あたりのコードはこんな感じ

$query = "SELECT COUNT(*) as `num` FROM {$query}";
        $row = mysql_fetch_array(mysql_query($query)) or die($query."<br/><br/>".mysql_error());;
        $total = $row['num'];

9mysql_fetch_array行目は行です

私の user_inbox テーブルは次のようになります

+------------+---------------+------+-----+----------+
| Field             | Type          | Extra          |
+------------+---------------+------+-----+----------+
| message_id        | int(11)       | auto_increment |
| receiver_user_id  | int(11)                        |
| receiver_username | varchar(255)                   |
| sender_user_id    | int(11)                        |
| sender_username   | varchar(255)                   |
| mail_subject      | varchar(255)                   |
| mail_message      | text                           |
| mail_date_sent    | datetime                       |
| mail_viewed       | enum('0','1')                  |
| mail_deleted      | enum('0','1')                  |
+------------+---------------+------+-----+----------+

そして、私の user_outbox テーブルは次のようになります

+------------+---------------+------+-----+----------+
| Field             | Type          | Extra          |
+------------+---------------+------+-----+----------+
| message_id        | int(11)       | auto_increment |
| sender_user_id    | int(11)                        |
| sender_username   | varchar(255)                   |
| receiver_user_id  | int(11)                        |
| receiver_username | varchar(255)                   |
| mail_subject      | varchar(255)                   |
| mail_message      | text                           |
| mail_date_sent    | datetime                       |
| mail_viewed       | enum('0','1')                  |
| mail_deleted      | enum('0','1')                  |
+------------+---------------+------+-----+----------+

サイトのこの部分を整理するのに 2 日近くかかりましたが、それを終わらせる必要があります。フィードバックをお寄せいただきありがとうございます。

4

3 に答える 3

3

問題は、異なる数の列を返す UNION の使用です。

SELECT COUNT(*) as `num` FROM user_inbox ...
UNION
SELECT * FROM user_outbox ...

MySQL に行数を合計してもらうことができます。

SELECT COUNT(*) AS `num`
FROM
(
     SELECT * FROM user_inbox ...
     UNION ALL
     SELECT * FROM user_outbox ...
) AS your_table_alias

または:

SELECT 
    (SELECT COUNT(*) FROM user_inbox ...) +
    (SELECT COUNT(*) FROM user_outbox ...) AS `num`
于 2012-05-20T11:09:34.087 に答える
3

クエリの 2 番目の部分 (UNION の後) にも COUNT(*) が必要です。

SELECT COUNT(*) as `num` FROM user_inbox WHERE user_inbox.receiver_user_id='4' AND user_inbox.mail_deleted ='1' UNION SELECT COUNT(*)  FROM user_outbox WHERE user_outbox.sender_user_id='4' AND user_outbox.mail_deleted ='1' 
于 2012-05-20T11:10:40.420 に答える
0

クエリ「$query」についてさらに調査する必要があります。PHP (推測) コードで変数 "$query" に対して定義したクエリで、異なる数の列を選択しているようです (少なくともエラーはそう言っています)。

于 2012-05-20T11:11:48.093 に答える