1

私は2つのテーブルを持っています:

tickets

ticket_id, int(11), NO, PRI, , auto_increment
order_num, varchar(45), NO, , , 
user_id, int(11), YES, , , 
event_id, int(11), YES, , , 
number_of_tickets, varchar(4), YES, , , 
order_placed, timestamp, NO, , CURRENT_TIMESTAMP, 
payment_recd, enum('Yes','No'), YES, , No, 
payment_time, timestamp, YES, , , 

events

event_id, int(11), NO, PRI, , auto_increment
venue_id, int(11), YES, , , 
event_date, date, YES, , , 
event_time, time, YES, , , 
event_price, decimal(4,2), YES, , , 
event_capacity, int(11), YES, , , 
dateadded, timestamp, NO, , CURRENT_TIMESTAMP, 

ユーザーが購入したチケットをリストし、イベントの日付で注文する必要がありますが、次のようにしようとしているのは正しくソートされていません

select tickets.order_num as ordnum, tickets.event_id as tickid, tickets.number_of_tickets as numtix 
   from tickets, events
where  ((tickets.user_id = '1') and (tickets.payment_recd = 'Yes'))
  group by tickets.order_num 
order by events.event_date asc

何か案は?

4

5 に答える 5

2

テーブルを結合していないため、両方のテーブルのすべての行がリストされます。試してください:

select tickets.order_num as ordnum, tickets.event_id as tickid, tickets.number_of_tickets as numtix 
from tickets
inner join events on tickets.event_id = events.event_id
where ((tickets.user_id = '1') && (tickets.payment_recd = 'Yes'))
group by tickets.order_num order by events.event_date asc
于 2012-07-02T08:17:56.640 に答える
1

最初にJOIN、アプローチが遅すぎてJOIN最速であり、はるかに安全で、実際に使用でき、データベースで正しく記述された最も効率的なソリューションであるため、使用することをお勧めします。

SELECT t.order_num, t.event_id, t.number_of_tickets 
FROM tickets t
INNER JOIN events e ON (t.event_id = e.event_id)
WHERE ((t.user_id = '1') && (t.payment_recd = 'Yes'))
GROUP BY t.order_num
ORDER BY e.event_date ASC
于 2012-07-02T08:18:09.440 に答える
0

試してみてください:

select tickets.order_num as ordnum, tickets.event_id as tickid, tickets.number_of_tickets as numtix 
   from events
  inner join tickets on events.id = ticket.event_id
where  ((tickets.user_id = '1') and (tickets.payment_recd = 'Yes'))
  group by tickets.order_num 
order by events.event_date asc

デカルト積を取得して、テーブルeventsとテーブルの間の関係を表示しません。tickets

于 2012-07-02T08:18:09.007 に答える
0

where句に「AND ticket.event_id = events.event_id」が必要です。

2 つのテーブルを結合する方法を指定していないため、現時点では完全な結合を行っています。

于 2012-07-02T08:18:32.720 に答える
0

使ってみてください

 select tickets.order_num as ordnum, tickets.event_id as tickid,
 tickets.number_of_tickets as numtix from tickets inner join events on
    tickets.event_id=events.event_id where
 ((tickets.user_id = 1) && (tickets.payment_recd = 'Yes'))
 group by tickets.order_num order by events.event_date asc

ticket.user_id は整数であることを考慮してください。'' を使用して文字列として動作させることはできません...これを使用しようとするようなものでなければなりません ticket.user_id = 1

于 2012-07-02T08:20:01.240 に答える