1

私はPHPとMySQLの専門家にはほど遠いので、質問を作成する方法がわかりませんでした。これは、タイトルの曖昧さを説明しています。私は2つのテーブルを持っていますが、それらはひどく書かれていますが、変更することは許可されていません。彼らが共有するのはurlと呼ばれるフィールドだけです。主キーやインデックスはありません。それらの構造は次のとおりです。

Shareholder       |||   tags

url1 |  value1      |||      url1 | tag1 tag2 tag350 tag 400

url2  | value2      |||     url2 | tag8 tag400 tag350

url3  | value1      |||   url3 | tag2 tag1

url4 | value1       |||    url4 | tag5 tag 600

url5 | value2        |||   url5  | tag 60 tag8

これらの表から、株主ごとのタグの平均数を見つける必要があります。たとえば、株主はvalue1、value2です。
予想される出力は、たとえば、shareholder1(value1)になります。

一時的な配列を使用して、URLでタグの数を数えるのはかなり簡単でした。それなら、これらの価値観を関係株主に付け加えないといけないと思いますが、迷ってしまいます。私はこの問題を解決する方法を知りませんし、このタイプのPHP/SQL問題を形式化する方法さえ知りません。私は自然に失敗した試みをしました。それでも下に貼り付けます。誰かが私を助けることができますか?

$sqlprim = "SELECT DISTINCT content FROM shareholder";
$deletedtermsprim = mysql_query ($sqlprim);

while ($rowprim = mysql_fetch_array($deletedtermsprim))
{
$tagsbyshareholder = array();
foreach ($rowprim as $keys1 => $values1)
{
    $sql = "SELECT url FROM shareholder WHERE content like \"$values1\"";
    $output1 = mysql_query($sql);
    $deletedterms = array("tags", "[", "]", ":");
while ($row = mysql_fetch_array($output1)) {
    foreach ($row as $columnName => $columnUrl) {
        $sql2 = "SELECT content
FROM tags WHERE url like\"$columnUrl\"";
$deletedterms = mysql_query($sql2);
while ($row2 = mysql_fetch_array($deletedterms)) 
{
    foreach ($row2 as $keys2 => $columntags); 
    {
        $preparedtags = str_replace($deletedterms, "", $columntags);
        $temporaryarray = explode(" ", $preparedtags);
        $temporaryarray = array_values(array_filter($temporaryarray));
        $countedtagsbyurl = count($temporaryarray);
        array_push($tagsbyshareholder, $countedtagsbyurl);
        }
}
}
}

}
foreach ($tagsbyshareholder as $countitems => $numberoftagsbyshareholder);
            echo $values1. ";". $numberoftagsbyshareholder;
            echo "<br />";
}
4

1 に答える 1

1

これは問題のSQL部分に役立つ可能性があり、PHPで行う必要のある作業が簡素化されると思います。データベースが適切に正規化されていないか、PKなどが含まれていない可能性がありますが、2つのテーブルで結合を行うことはできます。

たとえば、次のクエリ:

SELECT s.url, s.content, t.content 
FROM shareholder s
INNER JOIN tags t 
ON s.url = t.url

戻り値

url1    value1  tag1 tag2 tag350 tag400
url2    value2  tag8 tag400 tag350
url3    value3  tag2 tag1
url4    value4  tag5 tag600
url5    value5  tag60 tag8

サンプルデータに。両方のテーブルをまとめるための内部結合を使用したこの種のクエリは、PHPに埋め込まれたループの多くを回避するのに確実に役立ちます。外側のループが繰り返されるたびにselectクエリを実行しようとしているため、これは特に重要なようです。

于 2012-07-25T14:54:04.393 に答える