Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα!

Λίγο ιδιαίτερο πρόβλημα, δεν κατάφερα να βρω λύση με το chatGPT.

Λοιπόν, (PHP / MySQL):

έχουμε δύο πίνακες, log1 και log2.

οι δύο πίνακες έχουν διαφορετικό αριθμό columns, ακόμα και διαφορετικό όνομα στα columns τους

ας πούμε ότι ο log1 έχει το column dateline (unix time) και ο log2 το column date (unix time επίσης)

 

Εγώ θέλω να τους "ενώσω" με κάποιο τρόπο σαν να είναι ένας πίνακας (με ordey by τα παραπάνω δύο unix time columns DESC) και να εμφανίσω τα σωστά στοιχεία βάσει ενός $page (1, 2, 3 κτλ) κι ενός $perpage (πχ 20 ή 50 ή ο,τιδήποτε).

Βασικά απλά να εμφανίσω τα σωστά στοιχεία για την τρέχουσα $page με βάση ένα $perpage κι ας χρειαστεί να τρέξω πάνω από 1 queries κι ας χρειαστεί να επεξεργαστώ ξεχωριστά με PHP τα αποτελέσματα.

Το πρόβλημά μου είναι ότι αν πχ τραβήξω (με $perpage = 50), με δύο ξέχωρα queries 50 γραμμές από τον κάθε πίνακα για κάποιο $page (1, 2, 3, κτλ) ordey by το unix time, μετά ενώνω με php τα arrays, κάνω ένα sorting (php) βάσει του κοινού unix time column descending και μετά περικόπτω με array_slice:

αν πχ φύγω από την page = 1 και πάω στην page = 2 κτλ κτλ, κάθε φορά θα τραβάει διαφορετικό εύρος τιμών από τη βάση δεδομένων, κι άρα κάτι χάνω.

Πχ με

PHP: $startat = ($page - 1) * $perpage;

MySQL: LIMIT $startat, $perpage

= αυτό θα ήταν σωστό αν είχα έναν πίνακα. Εδώ έχουμε δύο και κάτι χάνω ακόμα και αν τρέξω δύο ξέχωρα queries σαν αυτό το παράδειγμα. Θέλω να κρατήσω αυστηρά το $perpage μου και όχι να εμφανίσω (πχ για $perpage = 50), 100 αποτελέσματα αν τύχει και οι δύο πίνακες να δώσουν results.

 

Βγάζει νόημα; Καμιά ιδέα; :)

Κάτι θα πρέπει να γίνεται με offsets κτλ, αλλά δεν ξέρω πως να το κάνω. Ένα απλό παραδειγματάκι θα ήταν βολικό. Ελεύθερη η χρήση πολλών queries και php επεξεργασία επί των αποτελεσμάτων. ;)

Επεξ/σία από philos
Δημοσ.

Νομίζω το πρόβλημα είναι στο query και όχι στην php. Για να γίνει πιο εύκολο για εμάς μπορείς να δώσεις ένα sample set από τα 2 tables (columns, dummy data) από το κάθε table για να γίνει εύκολο το παράδειγμα του join(που μάλλον LEFT JOIN θα θες) ? 

Δημοσ.

Λοιπόν παιδιά, ευχαριστώ για τις κατευθύνσεις!

Η λύση είναι πράγματι το UNION ALL.

Σας επισυνάπτω παράδειγμα από το chatGPT.

SELECT * FROM (
    SELECT 
        id AS log_id, 
        user AS log_user, 
        action AS log_action, 
        timestamp AS log_time,
        'log1' AS source
    FROM 
        log1
    UNION ALL
    SELECT 
        event_id AS log_id, 
        username AS log_user, 
        event_description AS log_action, 
        UNIX_TIMESTAMP(created_at) AS log_time,
        'log2' AS source
    FROM 
        log2
) AS combined_logs
ORDER BY log_time
LIMIT $startat, $perpage;

Ευχαριστώ και πάλι!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...