Commit 2bc6b946 authored by Romain Loth's avatar Romain Loth

scholar directory sql query 2-in-1 (neighboors expansion and scholars info at once together)

parent 5f17088b
......@@ -68,58 +68,48 @@ $base = new PDO($dsn, $user, $pass, $opt);
// liste des chercheurs
$scholar_array = array();
$scholars = array();
if ($userid) {
if (sizeof($userid) > 0) {
// old way in two steps without a scholars <=> keywords table
// $sql1 = "SELECT keywords,last_name,first_name FROM scholars WHERE luid='" . $login . "'";
// $sql2 = "SELECT uid FROM sch_kw JOIN keywords ON sch_kw.kwid = keywords.kwid WHERE kwstr LIKE \"%" . trim($keyword)."%\"";
// new way in one query
$sql1 = <<< HERE_QUERY
SELECT second_level.uid
FROM sch_kw
LEFT JOIN sch_kw
AS second_level
ON sch_kw.kwid = second_level.kwid
WHERE sch_kw.uid = {$userid}
-- (uncomment if ego not self-neighboor)
-- AND second_level.uid != sch_kw.uid
GROUP BY second_level.uid
ORDER BY second_level.uid != {$userid} ; -- allows ego to be first
HERE_QUERY;
foreach ($base->query($sql1) as $row) {
if (array_key_exists($row['uid'], $scholar_array)){
$scholar_array[$row['uid']] += 1;
}else{
$scholar_array[$row['uid']] = 1;
}
}
}
}
// les scholars sont affichés par ordre de pertinence
arsort($scholar_array);
$scholar_id_array=array_keys($scholar_array);
// var_dump($scholar_id_array)."<br/>" ;
// liste des chercheurs "expansion transitive"
$scholars = array();
//
foreach ($scholar_id_array as $scholar_id){
// £TODO do it at once with previous SELECT !!
$sql = <<< END_QUERY
SELECT
// query idea:
// ------------
// SELECT sch_kw.uid AS source,
// count(sch_kw.kwid) AS similarity,
// second_level.uid AS neighboor
// FROM sch_kw
// LEFT JOIN sch_kw AS second_level ON sch_kw.kwid = second_level.kwid
// WHERE sch_kw.uid = 4207
// GROUP BY second_level.uid
// ORDER BY count(sch_kw.kwid) DESC, second_level.uid != 4207 ASC;
// exemple:
// +--------+------------+-----------+
// | source | similarity | neighboor |
// +--------+------------+-----------+
// | 4207 | 2 | 4207 |
// | 4207 | 2 | 2792 |
// | 4207 | 1 | 2732 |
// | 4207 | 1 | 2569 |
// | 4207 | 1 | 3128 |
// | 4207 | 1 | 2636 |
// | 4207 | 1 | 3488 |
// | 4207 | 1 | 2727 |
// | 4207 | 1 | 3604 |
// | 4207 | 1 | 3942 |
// | (...) |
// +--------+------------+-----------+
// implementation with all details and infos to retrieve
$sql = <<< HERE_QUERY
SELECT
scholars_and_affiliations.*,
COUNT(keywords.kwid) AS keywords_nb,
GROUP_CONCAT(keywords.kwid) AS keywords_ids,
GROUP_CONCAT(kwstr) AS keywords_list
FROM (
FROM (
SELECT
scholars.*,
affiliations.*
......@@ -128,20 +118,22 @@ FROM (
ON scholars.affiliation_id = affiliations.affid
WHERE (record_status = 'active'
OR (record_status = 'legacy' AND valid_date >= NOW()))
) AS scholars_and_affiliations
) AS scholars_and_affiliations
LEFT JOIN sch_kw
ON sch_kw.uid = scholars_and_affiliations.luid
LEFT JOIN keywords
LEFT JOIN sch_kw AS second_level
ON second_level.uid = scholars_and_affiliations.luid
JOIN sch_kw ON sch_kw.kwid = second_level.kwid
JOIN keywords
ON sch_kw.kwid = keywords.kwid
GROUP BY luid
END_QUERY;
WHERE sch_kw.uid = {$userid}
GROUP BY luid
ORDER BY count(sch_kw.kwid) DESC, second_level.uid != {$userid} ASC;
// echo var_dump($scholar_id)."<br/>" ;
//$query = "SELECT * FROM scholars";
foreach ($base->query($sql) as $row) {
HERE_QUERY;
foreach ($base->query($sql) as $row) {
$info = array();
$info['unique_id'] = $row['luid'];
$info['doors_uid'] = $row['doors_uid'];
......@@ -186,9 +178,10 @@ foreach ($base->query($sql) as $row) {
// $info['fax'] = $row['fax'];
// $info['affiliation_acronym'] = $row['affiliation_acronym'];
$scholars[$row['luid']] = $info;
}
}
}
/// stats
include ("php_library/stat-prep_from_array.php");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment