Bir süredir bunu çözmeye çalıştım ve bir çözüme gelmedim.Birleştirilmiş Tabloda POST-Değişken başına SQL'de arama
Mobil Cihazlarla dolu bir tablodan okurum ve bunları listeler ve kullanıcıya Movile Device Name (Kullanıcı Adı) ve Username (Kullanıcı Adı) başına listeyi arama olanağı tanır.
Bu benim Kod geçerli: bir User-ID içermiyor masa satırlar boş bırakılır ise, sürece tbl_mobdev.mobdev_user bir User-ID içerdiğinden amaçlandığı gibi
SELECT
*
FROM
tbl_mobdev
LEFT JOIN
tbl_mobdev_type ON mobdev_type_id = mobdev_type
LEFT JOIN
tbl_marke ON marke_id = mobdev_type_marke
LEFT JOIN
tbl_user ON tbl_user.id = mobdev_user
WHERE
CONCAT(tbl_marke.marke_name,' ',tbl_mobdev_type.mobdev_type_bezeichnung) LIKE '%".$_POST['marke_name']."%'
AND
CONCAT(tbl_user.name,' ',tbl_user.vorname) LIKE '%".$_POST['user']."%'
AND
mobdev_aktiv = '1'
ORDER BY
".$_GET['sort']." ".$_GET['sort2']."
Her şey çalışır.
Bunun için herhangi bir Çözüm?
Düzenleme: "süzgeç" tbl_user için SOL JOIN yerleştirme çözüm çalışmıyor. Her satırda aşağıdaki gibi bir SQL gösterilecektir. LIKE yalnızca bir eşleşme içermiyorsa, eşleşen olmayan sonuçlar birleştirilmez, satır filtrelenmez.
SELECT mobdev_id, mobdev_type_bezeichnung, marke_name, tbl_user.name AS user_name, tbl_user.vorname AS user_vorname
FROM tbl_mobdev
LEFT JOIN tbl_mobdev_type ON mobdev_type_id = mobdev_type
LEFT JOIN tbl_marke ON marke_id = mobdev_type_marke
LEFT JOIN tbl_user ON tbl_user.id = mobdev_user
AND CONCAT(tbl_user.name, ' ', tbl_user.vorname) LIKE '%%'
WHERE CONCAT(tbl_marke.marke_name, ' ', tbl_mobdev_type.mobdev_type_bezeichnung) LIKE '%%'
AND mobdev_aktiv = '1'
ORDER BY marke_name ASC
LIMIT 0 , 30
Düzenleme2: SQL'in aşağıdaki şekilde ayarlanması, davranış değiştirilmedi.
SELECT mobdev_id, mobdev_type_bezeichnung, marke_name, tbl_user.name AS user_name, tbl_user.vorname AS user_vorname
FROM tbl_mobdev
LEFT JOIN tbl_mobdev_type ON mobdev_type_id = mobdev_type
LEFT JOIN tbl_marke ON marke_id = mobdev_type_marke
LEFT JOIN tbl_user ON tbl_user.id = mobdev_user
AND CONCAT(tbl_user.name, ' ', tbl_user.vorname) LIKE '%G%'
WHERE CONCAT(tbl_marke.marke_name, ' ', COALESCE(tbl_mobdev_type.mobdev_type_bezeichnung, '')) LIKE '%%'
AND mobdev_aktiv = '1'
ORDER BY marke_name ASC
LIMIT 0 , 30
$ _POST ['kullanıcı'] ile eşleşen satırlar hala filtrelenmiyor.
Bulanıklaştırılmış adlara sahip davranışların örnek resmini yükledim, soldaki resim herhangi bir filtre olmadan seç, sağdaki resim gerçek bir Kullanıcıyla (Bulanık, ancak mobdev_id ile aynı adı taşıyan bir addır) seç 3' . Gördüğünüz gibi
http://fs5.directupload.net/images/160404/tmdbyzws.png
, diğer beş satır onlar filtreyle eşleşen olmadığı için onları tamamen gitmiş istiyorum. katılır sadece olmadan, hala orada.
Edit3: Eh, şimdi ben yaptım ... ne yazık ki PHP kullanarak oldukça kirli bir şekilde. omeone bunun için daha iyi bir çözüm ile geliyor lütfen bana bildirin.
$query = "
SELECT
mobdev_id,
mobdev_type_bezeichnung,
marke_name,
tbl_user.name AS user_name,
tbl_user.vorname AS user_vorname
FROM
tbl_mobdev
LEFT JOIN
tbl_mobdev_type ON mobdev_type_id = mobdev_type
LEFT JOIN
tbl_marke ON marke_id = mobdev_type_marke
LEFT JOIN
tbl_user ON tbl_user.id = mobdev_user
WHERE
CONCAT(tbl_marke.marke_name,' ',tbl_mobdev_type.mobdev_type_bezeichnung) LIKE '%".$_POST['marke_name']."%'
";
if($_POST['user'])
{
$query .= "
AND
CONCAT(tbl_user.name,' ',tbl_user.vorname) LIKE '%".$_POST['user']."%'
";
}
$query .= "
AND
mobdev_aktiv = '1'
ORDER BY
".$_GET['sort']." ".$_GET['sort2']."
";
"SOL ET" olduğunda, gerçek sağa katılma davranışını elde etmek için tüm sağdaki tablo koşullarını "ON" cümlelerine koyun. (WHERE’de, normal iç katılım sonucu elde edersiniz.) – jarlh
Bu kodu asla kullanmayın !! Cehennem gibi bir SQL Enjeksiyon Kapısı var! Kullanıcı girişinizi nasıl aldığınıza ve doğruladığınıza dair önce yeniden düşünün, hazırlanmış ifadeleri kullanın !!! Ama asla bir sorguda bir POST veya GET Var kullanmayın! –
Bu tavsiye için teşekkürler, ancak bu bir uluslararası koddur, bunu kullanan kişiler de kaynak kodunu doğrudan değiştirebilir. – Daniel