2 Distinct values in one table and one query

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

2 Distinct values in one table and one query

Δημοσίευση από Akis_gr49 » 04 Ιούλ 2009 03:29

Γεια σας παιδιά,

Έγραψα στα Αγγλικά το θέμα γιατί πιστεύω ότι το κατανοείτε καλύτερα.


Έχω έναν πίνακα με βιβλία και θέλω να εμφανίσω το σύνολο (COUNT) των μοναδικών αποτελεσμάτων. Δηλαδή μοναδικό user_id ΚΑΙ μοναδική ημερομηνία

Μερικά παραδείγματά:

BOOK_ID USER_ID DATE
1 44 2009-07-03
2 44 2009-07-03
3 39 2009-07-03

ΑΠΟΤΕΛΕΣΜΑ: 2

--------------------------------------------
BOOK_ID USER_ID DATE
1 42 2009-07-03
2 44 2009-07-03
3 39 2009-07-03

ΑΠΟΤΕΛΕΣΜΑ: 3

--------------------------------------------
BOOK_ID USER_ID DATE
1 44 2009-07-03
2 44 2009-07-03
3 44 2009-04-02

ΑΠΟΤΕΛΕΣΜΑ: 2

--------------------------------------------
BOOK_ID USER_ID DATE
1 44 2009-07-03
2 44 2009-07-03
3 44 2009-07-03

ΑΠΟΤΕΛΕΣΜΑ: 1

Κάθε βοήθεια ευπρόσδεκτη, σας ευχαριστώ πολύ εκ των προτέρων.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

2 Distinct values in one table and one query

Δημοσίευση από dva_dev » 04 Ιούλ 2009 14:30

Αυτό που ζητάς είναι 2 πράγματα:
α) Να βρείς ποιές είναι οι μοναδικές εγγραφές που έχεις.

Κώδικας: Επιλογή όλων

select distinct `user_id`, `date` from mytable
β) Να βρείς πόσες οι είναι εγγραφές του α)

Κώδικας: Επιλογή όλων

select count(*) from (
    select distinct `user_id`, `date` from mytable
) tmp;
ή

Κώδικας: Επιλογή όλων

select count(*) from (
    select 1 from mytable group by `user_id`, `date`
) tmp;
Δοκίμασε τι είναι πιο γρήγορο σε πολλά δεδομένα (και πες μας αν θέλεις).

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

2 Distinct values in one table and one query

Δημοσίευση από Akis_gr49 » 04 Ιούλ 2009 15:09

Ευχαριστώ πολύ για την απάντηση.

Νομίζω πως αυτό
select distinct `user_id`, `date` from mytable
στην php δεν ισχύει.

γίνεται να έχω δυο πεδία με ένα distinct?

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

2 Distinct values in one table and one query

Δημοσίευση από Pavel » 04 Ιούλ 2009 15:32

Akis_gr49 έγραψε:γίνεται να έχω δυο πεδία με ένα distinct?
Φυσικά,
http://dev.mysql.com/doc/refman/5.4/en/ ... ation.html
Akis_gr49 έγραψε:Νομίζω πως αυτό
select distinct `user_id`, `date` from mytable
στην php δεν ισχύει.
Η PHP τι σχέση έχει με το MySQL query;
Εσύ είσαι τρελός.

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

2 Distinct values in one table and one query

Δημοσίευση από Akis_gr49 » 04 Ιούλ 2009 15:36

είναι ένα σκριπτάκι σε php που έχει μέσα το query.

Αυτό δεν δουλεύει πάντως

<?php
$query ="select distinct `user_id`, `date` from mytable";
?>

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

2 Distinct values in one table and one query

Δημοσίευση από Pavel » 04 Ιούλ 2009 15:55

Τον πίνακα mytable τον λένε;
Εσύ είσαι τρελός.

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

2 Distinct values in one table and one query

Δημοσίευση από Akis_gr49 » 04 Ιούλ 2009 19:19

dva_dev έγραψε:Αυτό που ζητάς είναι 2 πράγματα:
α) Να βρείς ποιές είναι οι μοναδικές εγγραφές που έχεις.

Κώδικας: Επιλογή όλων

select distinct `user_id`, `date` from mytable
β) Να βρείς πόσες οι είναι εγγραφές του α)

Κώδικας: Επιλογή όλων

select count&#40;*&#41; from &#40;
    select distinct `user_id`, `date` from mytable
&#41; tmp;
ή

Κώδικας: Επιλογή όλων

select count&#40;*&#41; from &#40;
    select 1 from mytable group by `user_id`, `date`
&#41; tmp;
Δοκίμασε τι είναι πιο γρήγορο σε πολλά δεδομένα (και πες μας αν θέλεις).
Παιδιά σας ευχαριστώ πολύ.
Με το β) δούλεψε επιτυχώς.

Θα ήθελα και μια περίπλοκη δυνατότητα επιπλέον.
Να εμφανίζω το σύνολο των βιβλίων που έχουν μοναδικό user_id, για μοναδική ημερομηνία (όπως το προηγούμενο ακριβώς) αλλά με την διαφορά ότι όταν το ένα από τα δύο είναι "ΟΧΙ", δλδ δεν έχει έκτπωση να μην το μετράει στο σύνολο.

Έστω ο πίνακας:

[table]
BOOK_ID USER_ID DATE ΕΚΠΤΩΣΗ
1 44 2009-07-03 ΝΑΙ
2 44 2009-07-03 ΟΧΙ
3 39 2009-07-03 ΟΧΙ

Αποτέλεσμα: Δεν παρέχεται έκπτωση!

[/table]

Είναι εφικτό αυτό;

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

2 Distinct values in one table and one query

Δημοσίευση από Stadem » 05 Ιούλ 2009 03:23

Γιατί δεν το κάνεις:

Κώδικας: Επιλογή όλων

select distinct `user_id`, `date` from mytable where ΕΚΠΤΩΣΗ !='NAI'
web-IQ Interactive Quality
Εικόνα

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

2 Distinct values in one table and one query

Δημοσίευση από Akis_gr49 » 05 Ιούλ 2009 03:53

To δοκίμασα αλλά εμφανίζει τιμή, όχι σύνολο.
Και με το count δεν δουλεύει.

Πρέπει το πλήθος των 2 μοναδικών πεδίων να έχει τιμή ΝΑΙ για να εμφανίσει "ΕΚΠΤΩΣΗ".

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

2 Distinct values in one table and one query

Δημοσίευση από dva_dev » 05 Ιούλ 2009 18:25

Ισως κάτι τέτοιο να σου κάνει

Κώδικας: Επιλογή όλων

select count&#40;distinct a.`user_id`, a.`date`&#41; from mytable a left outer join mytable b on &#40;a.`user_id`=b.`user_id` and a.`date`=b.`date` and b.`εκπτωση`='ΟΧΙ'&#41; where a.`εκπτωση`='ΝΑΙ' and b.`εκπτωση` is null

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

2 Distinct values in one table and one query

Δημοσίευση από Akis_gr49 » 05 Ιούλ 2009 19:22

Φίλε dva_dev είσαι εξαιρετικός, δούλεψε.
Ακριβώς το αποτέλεσμα που ήθελα.

Πιστεύετε ότι για να βρίσκουμε τέτοια περίπλοκα ερωτήματα για τις εφαρμογές μας είναι από εμπειρία κυρίως ή από πολύ διάβασμα;

Προσωπικά πιστεύω ότι αυτό το ερώτημα αν μου ξανατύχει θα έχω σίγουρα τη δυνατότητα να το απαντήσω.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

2 Distinct values in one table and one query

Δημοσίευση από dva_dev » 06 Ιούλ 2009 01:19

Προσωπικά πιστεύω ότι αυτό το ερώτημα αν μου ξανατύχει θα έχω σίγουρα τη δυνατότητα να το απαντήσω.
Ωραία, αν μας ξαναρωτήσεις το ίδιο πράγμα θα το απαντήσεις μόνος σου. :D

Πάντως το query (και τον πίνακα σου) μην το αφήσεις έτσι. Σηκώνει βελτίωση.

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης