Mysql
 sql >> база данни >  >> RDS >> Mysql

филтриране на резултатите чрез две избрани опции

SELECT c.gender, COUNT(*) AS 'count'
FROM ads a 
INNER JOIN 
    (SELECT fieldvalue, fieldtitle AS country FROM field_values) b 
        ON b.fieldvalue = a.ad_country
INNER JOIN
    (SELECT fieldvalue, fieldtitle AS gender FROM field_values) c
        ON c.fieldvalue = a.ad_gender
GROUP BY c.gender
 

Можете да добавите следните филтри преди GROUP BY :

  • Година:WHERE YEAR(a.ad_birthday) = '2012'
  • Държава:WHERE b.country = 'Albania'

Вижте го в действие .

След това, след като конвертирате своя mysql_ функции към mysqli_ или PDO (тъй като е отхвърлен ), можете просто да покажете резултата по пол:

<преди>| ПОЛ | БРОЯ |------------------| Жена | 2 || Мъж | 1 |

Актуализация 1

За да приложите този код, можете да опитате нещо подобно (не е тествано):

$link = mysqli_connect("localhost", "user_name", "password", "stock");

if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}

$stmt = mysqli_prepare($link, "SELECT c.gender, COUNT(*) AS 'count' FROM ads a 
INNER JOIN (SELECT fieldvalue, fieldtitle AS country FROM field_values) b ON b.fieldvalue = a.ad_country
INNER JOIN (SELECT fieldvalue, fieldtitle AS gender FROM field_values) c ON c.fieldvalue = a.ad_gender
WHERE b.country = ? AND (YEAR(a.ad_birthday) = ? OR YEAR(a.ad_birthday) <> NULL) GROUP BY c.gender");

mysqli_bind_param($stmt, 'ss', $country, $year) or die(mysqli_error($dbh));

$result = mysqli_stmt_execute($stmt) or die(mysqli_error($link));

while($row = mysqli_fetch_assoc($result)) {
echo "There are " . $row[count] . ' ' . $row[gender] . "<br />\n";
}

mysqli_close($link);
 

Актуализация 2

Тъй като не можете да използвате mysqli по някаква причина кодът по-долу трябва да работи. Моля, обърнете внимание, че се предполага, че страната не е празна.

$query = "SELECT c.gender, COUNT(*) AS 'count' FROM ads a 
    INNER JOIN (SELECT fieldvalue, fieldtitle AS country FROM field_values) b ON b.fieldvalue = a.ad_country
    INNER JOIN (SELECT fieldvalue, fieldtitle AS gender FROM field_values) c ON c.fieldvalue = a.ad_gender
    WHERE b.country = " . mysql_real_escape_string($country);

if(isset($year)) $query .= " AND YEAR(a.ad_birthday) = " . mysql_real_escape_string($year);

$query .= ' GROUP BY c.gender';

$sql2 = mysql_query($query);
while($row = mysql_fetch_assoc($sql2)) {
    echo "There are " . $row[count] . ' ' . $row[gender] . "<br />\n";
}
 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AngularJS &Laravel 4.2 извличат данни от таблици за умножение и ги обединяват

  2. Стабилно/повтарящо се произволно сортиране (MySQL, Rails)

  3. Как да ограничите използването на формуляр или да ограничите достъпа

  4. MySQL няма да се изключи:Спиране на сървъра:ГРЕШКА! PID файлът на MySQL сървъра не може да бъде намерен!

  5. Заявка за избор на MySQL с име на променлива колона