2012-07-02 7 views
1

J'ai deux tables:MySQL se joindre, pour ne pas corriger

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, 

je dois la liste des billets achetés par un utilisateur et de l'ordre par la date de l'événement, mais ce qui suit, je suis en train est de ne pas faire le genre par correctement

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 

Des idées?

+1

et qu'est-ce qui est incorporé? à quoi ressemble l'ordre? – Sajmon

+0

Je ne vous vois pas utiliser la table 'events' dans votre requête ??? – alfasin

Répondre

2

vous n'êtes pas joindrez les tables, il liste toutes les lignes des deux tables, essayez:

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 
0

Essayez avec:

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 

Vous ne présentez pas la relation entre events et tickets tables, obtenir un produit cartésien.

1

D'abord, je vous recommande d'utiliser JOIN parce que votre approche est trop lente et JOIN est la plus rapide, beaucoup plus sûre et en fait la solution la plus efficace que vous pouvez utiliser et écrite correctement.

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 
0

Vous avez besoin d'un 'ET tickets.event_id = events.event_id' dans votre clause where.

Vous n'avez pas spécifié comment joindre les deux tables, donc pour l'instant vous faites une jointure complète.

0

essayer de l'utiliser

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 

et s'il vous plaît considérer que tickets.user_id est un entier, vous ne pouvez pas comportez comme une chaîne avec « » ... il doit être comme essayer de l'utiliser des billets. user_id = 1