Mysql değeri meta tabloda: Nasıl önemli bir veri katılabilirsiniz?

3 Cevap php

Benim veritabanında üç tablo var ki:

CREATE TABLE `users` (
`user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR(16) NOT NULL
);

CREATE TABLE `users_meta` (
`meta_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT NOT NULL ,
`key` VARCHAR(200) NOT NULL ,
`value` TEXT NOT NULL
);

CREATE TABLE `posts` (
`post_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT NOT NULL ,
`content` TEXT NOT NULL
);

Tablo users_meta biz istediğimiz herhangi bir bilgiyi ekleyebilir şekilde kullanıcılar hakkında bilgi sadece bir anahtar-değer deposudur.

Ben anahtar "yaş" olduğunu her kullanıcı için users_meta tabloya bir anahtar => değer çifti katma ve değer yaşlarına temsil eden bir sayı olduğunu söylüyor.

Koşullar bu seti göz önüne alındığında, kullanıcının yaşına göre sıralı ilk 10 mesajları seçmek için en iyi yolu nedir?

3 Cevap

Ben istiyorum ki açık olmak kendini katılmak sınırlı katılmak katılmak durumunu koyarak Seviyorum:

SELECT p.post_id, p.content
FROM users u 
INNER JOIN users_meta um 
    ON (u.user_id = um.user_id) AND um.key = 'age'
INNER JOIN posts p 
    ON (p.user_id = u.user_id)
ORDER BY um.value
limit 10

Sadece kullanıcı yaşına göre sipariş ederseniz, aynı kullanıcı (genç bir) 10 mesaj seçecektir.

Ben doğrudan kullanıcıların tabloda denormalize ve mağaza yaş öneririz.

@ KOHb katılıyorum, ama bu tam olarak istediğiniz buysa, burada sorgu:

SELECT TOP 10 p.id, p.content
FROM users u JOIN users_meta um ON (u.user_id = um.user_id) 
             JOIN posts p ON (p.user_id = u.user_id)
WHERE um.key = 'age'
ORDER BY um.value