MySQL sorgusu 3 tablolarına dayanan

1 Cevap php

PHP ile çalışmak. Ben bir tablo adında kitap var. Tablo kitap Ben yazarın kimliği ile yayıncının kimliği ve book_author ile kitap, book_publisher adıyla book_name var. Kitapları masanın yanı sıra ben kitapları yayıncılar isimleri ve kimlikleri ile yazarlar adları ve kimlikleri ve books_publisher ile books_author tablo var.

Benim kullanıcılara yazar adını, kitap adı ve yayıncı adı ve bir arama düğmesi temsil 3 giriş alanları vermek. Onlar bir giriş, yazar adı, aynı aramada bir kitap adı ve yayıncı adını can ve benim veritabanını sorgulamak ve yazar adı gibi sahip kitaplar adları (% ..%) geri dönmek zorunda girilen kitabın GİBİ girilen yazar adı, kitap adı isim ve girilen yayıncı adı GİBİ yayıncı adı.

Sorun sadece yazarın kimliği ve yayıncının kimliği benim kitaplarım tabloda saklanan ve ben her üç alana göre arama ve çiftleri (isme ve aynı zamanda yayıncı tarafından maç vardı kitap) dışlamak için ihtiyaç olmasıdır.

Biri bana bu sorguyu inşa yardımcı olabilir misiniz?

1 Cevap

Sadece sorgu katılmak:

SELECT *
FROM books b
JOIN book_authors ba ON b.author_id = ba.id
JOIN book_publishers bp ON b.publisher_id = bp.id
WHERE b.book_name LIKE '...'
AND ba.author_name LIKE '...'
AND bp.publisher_name LIKE '...'

Eğer kullanıcı aslında bir yayıncı adı girdiyseniz, sadece, diyelim ki, yayıncı ismi filtre dinamik için WHERE fıkra anlamı, sorgu oluşturmak gerekir bu yüzden genellikle bu durumlarda arama kutuları isteğe bağlıdır.

Ayrıca, arama LIKE '%blah%' binlerce ya da belki on binlerce kayıt ötesinde ölçeklenebilir değildir. Hayır indeksleme için hitap edebilirsiniz. Yerine MySQL full-text searching gibi bir şey kullanarak içine bakmak isteyebilirsiniz.

Son olarak, mysql_real_escape_string() ile tüm giriş alanları geçmek, yani sizin girdiyi emin olun.