MySql: çoxlu tablelərdən select etmək.

Salam. Burda ilişmişəm, hər postun taglarını göstərmək istəyirəm. Bunun üçün GROUP_CONCAT istifadə etməliyəm? Siz də tag sistemi bu strukturda qurursuz? [code] posts id |title ----------- 1 |title1 2 |title2 3 |title3 tags id | tag_name ------------- 1 | tag1 2 | tag2 3 | tag3 tags_relationships id | post_id | tag_id --------------------- 1 | 2 | 1 2 | 2 | 2 3 | 1 | 1 Sorğunu necə yazım ki bu cür table formatı qaytarsın? id | title | tags ----------------------- 1 | title2|tag1,tag2 1 | title1|tag1,tag3[/code]

Verilmiş cavablar və yazılan şərhlər (3 cavab var)

E. Hacı (2016-12-16 20:44:03)
Yox elə təkrar təbii ki doğru deyil. Vördpressdə deyim də necədir: sadə posts query ilə postlar oxunur, inner join olmadan. php foreach ilə onlar dərc edilərkən foreach-in içində artıq tags-a müraciət göndərilir post_id parametrinə görə. Deyə bilərsiz dövr içində sql query çoxsaylı mysql sorğularına gətirib çıxarar axı - bəli elədir, amma bu o birindən, hamsı birində nəhəng sql data çəkməkdən daha effektivdir. Həm də əgər data çox böyükdürsə (tutaq ki birdən birə min post çəkirsizsə) o halda cache texnologiyalarından istifadə edib məsələni optimallaşdırmaq olar. Kiçik dövrlər üçün isə( tutaq ki 20 post çəkirsiz, içində də teqləri), bu 1+20 sorğu demək olacaq ki bu elə də çox deyil.

Anar (2016-12-16 20:00:54)
DB strukturu wordpressdən götürmüşəm. 0-dan yazıb öyrənmək istəyirəm. Amma wordpressin query kodlarını oxuya bilmədim, qarışıq gəldi mənə. Orda da bu cür ediblər? Posts tablesində columnların sayını artırandan sonra yenə də bu taglara görə o columnları təkrar-təkrar sırlamaq doğrudur? yoxsa bunu loop içində ikinci bir query ilə etmək yaxşı olar?

E. Hacı (2016-12-16 11:34:12)
Bu elə WordPress db strukturunun kopyalanmasıdır, nə əcəb elə WordPress-in özünü istifadə etmirsiz? Qaldı sonda vergüllə ayrılmış teqlərə, ona qəti ehtiyac yoxdur. Ümumi siyahı etmək lazımdır, ki hər teq bir sətirdə olsun. Sonra onu php ilə oxuyanda vergüllə ya nə ilə istəsəz birləşdirərsiz. SQL table-da onları birləşdirmək cəhdi həm artıq əziyyətdir, həm sql-i ağırlaşdırar, həm də kod baxımından yanlış yanaşmadır. SQL-ə gəldikdə isə [sql] select a.id,a.title , aaa.tag_name from posts a inner join tags_relationships aa on a.ID=aa.post_id inner join tags aaa on aaa.id=aa.tag_id [/sql] Vəssalam. Bu sorğu sizə verəcək təxminən belə bir şey 1 title1 tag1 2 title1 tag2 3 title2 tag1 4 title2 tag4 və.s. Ordan da istədiyiniz oxuyub emal edə bilərsiniz.

Mövzu üzrə bənzər suallara da baxa bilərsiniz.

Şəhər və maşın database

Dreamweaver uzaq(remote) mysql bağlantı

Necə SQL sorğunu sürətləndirim?

Sqlmap ilə delete əmri

WordPress saytda vidgetleri editlemek və yeni vidgetlerin əlavə edilməsi haqqında

MySQL-Java