PHP ve MySQL Query kullanarak Web Filtre

3 Cevap php

Tamam, bu yüzden benim sitede bir kullanıcı oyunun türü veya oyun oynamak olacak modelin ya göre oyunların süzülmeye seçebileceğiniz bir filtre bölümü var.

Ben veritabanını sorgulamak ve tarz tek set madde ise türe göre filtreleme modeli tek set madde ise modele göre filtreleme, ya da küme hem eğer hem filtreleyen bir sorgu yazmaya çalışıyorum. Seni duymak için çok iyi olurdu bu iş iyi bir yöntem biliyorsanız kod de çok verimli olmak istiyorum.

3 Cevap

varsayılarak değişkenler $genre ve $model zaten kaçtı. demo kod yalnızca, konuya açıklık getirmek amacıyla güvenlik yok.

$sqlQuery = 'select * from games where 1=1';
if ( !empty($genre) ) $sqlQuery .= " and genre=$genre";
if ( !empty($model) ) $sqlQuery .= " and model=$model";

Aşağıdaki cevap form alanları için sorgulanacak olan değeri içeren varsayar, unutmayın. Hata denetimi unutmak, ve SQL enjeksiyon tipi kesmek önlemek için $ _GET / $ _POST değişkenleri doğrulamak gerekir ki yok.

// Generally you would have a function to construct your query here:
function select($where,$orderBy){
...
}

// Then when you when you are ready to build your query

$where = "";

if($model !== 'all'){                  
  $where .= "model ='".$model."'";
  $orderBy = "model ASC";
}

if($genre !== 'all'){                  
  if(isset($model)&&($model !== 'all')){
    $where .= " AND ";
  }
  $where .= "genre <='".$genre."'";
  $orderBy = "genre ASC";
}

// Adding additional filters will look like this

if($additionalFilter !== 'all'){
  if(isset($genre)&&($genre !== 'all')||isset($model)&&($model !== 'all')){
    $where .= " AND ";
  }                  
  $where .= "additionalFilter <='".$additionalFilter."'";
  $orderBy = "additionalFilter ASC";
}

// And finally to put it all together:

select($where, $orderBy);

En iyi yaklaşım, ilk olarak veritabanı yapısı için:

Table 'game':
| id | title | description |
Table 'models':
| id | name | description |
Table 'genres':
| id | name | description |
Table 'game2model':
| game_id (FK to game.id) | model_id (FK to models.id) |
Table 'game2genre':
| game_id (FK to game.id) | genre_id (FK to genres.id) |

DB bu şekilde normalize edildiğinde, SQL filtreleme yapıyor son derece kolaydır. Bu sözde SQL kodunu doğru yolda almalısınız:

[Biz türler kimlikleri 1,2,3 varsayarak ve modelleri kimlikleri 10, 11 ve 12].

SELECT g.id, g.name, g.description
FROM games g, games2genre gg, games2model gm
WHERE gg.game_id = g.id
AND gm.game_id = g.id
AND gg.genre_id IN (1,2,3)
AND gm.model_id IN (10,11,12)
ORDER BY g.name ASC