Hi,
Ich habe ein Problem mit einer komplizierten Datenbankabfrege.
Das Problem ist zwar sehr kompliziert aber ich versuche es bestmöglich zu beschreben.
(Habe mithilfe der sufu nichts gefunden)
Ich möchte bei dieser abfrage mehrere eingegebene Daten mit mehreren dazu passenden Spalten vergleichen und die Ergebnisse danach Sortiert nach der höchsten Anzahl von übereinstimmenden Feldern ausgeben.
Stimmt also Eingabe A mit dem Feld A im Datenbankeintrag 1 überein, Feld B aber nicht
und in Datenbankeintrag 2 stimmen beide überein dann soll erst Datenbankeintrag 2 und dann 1 angezeigt werden.
Beispiel:
Eingabe: A=1 B=2 C=3 D=4
DBE 1. : A=1 B=5 C=4 D=7 1 Treffer
DBE 2. : A=1 B=5 C=3 D=8 2 Treffer
DBE 2. : A=1 B=2 C=3 D=4 4 Treffer
Ausgabe:
DBE1
DBE2
DBE3
1. Lösungsansatz über MySql
Lösungsansatz mit php:
Ich würde das Problem wenn möglich gerne in Mysql lösen, da der Vorgang so schneller abläuft.
Ich hoffe es kann mir jmd Helfen, die Suche sollte nämlich möglichst bis morgen fertig sein.
Danke im Vorraus,
Pascal Jacob
Ich habe ein Problem mit einer komplizierten Datenbankabfrege.
Das Problem ist zwar sehr kompliziert aber ich versuche es bestmöglich zu beschreben.
(Habe mithilfe der sufu nichts gefunden)
Ich möchte bei dieser abfrage mehrere eingegebene Daten mit mehreren dazu passenden Spalten vergleichen und die Ergebnisse danach Sortiert nach der höchsten Anzahl von übereinstimmenden Feldern ausgeben.
Stimmt also Eingabe A mit dem Feld A im Datenbankeintrag 1 überein, Feld B aber nicht
und in Datenbankeintrag 2 stimmen beide überein dann soll erst Datenbankeintrag 2 und dann 1 angezeigt werden.
Beispiel:
Eingabe: A=1 B=2 C=3 D=4
DBE 1. : A=1 B=5 C=4 D=7 1 Treffer
DBE 2. : A=1 B=5 C=3 D=8 2 Treffer
DBE 2. : A=1 B=2 C=3 D=4 4 Treffer
Ausgabe:
DBE1
DBE2
DBE3
1. Lösungsansatz über MySql
PHP:
<?php
include '../login/check.php';
include '../inc/config.php';
$max = 10;
$connectionid = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
$sql = "SELECT * FROM products";
$sql2 ="
(SELECT age FROM products WHERE age = ".$_REQUEST["age"].")
union all (SELECT sex FROM products WHERE sex LIKE ".$_REQUEST["sex"].")
union all (SELECT reason FROM products WHERE reason LIKE ".$_REQUEST["reason"].")
union all (SELECT musik_genre FROM products WHERE musik_genre LIKE ".$_REQUEST["music_genre"].")
union all (SELECT musik_year FROM products WHERE musik_year LIKE ".$_REQUEST["music_year"].")
union all (SELECT hobby1 FROM products WHERE hobby1 LIKE ".$_REQUEST["hobby1"].")
union all (SELECT hobby2 FROM products WHERE hobby2 LIKE ".$_REQUEST["hobby2"].")
union all (SELECT color1 FROM products WHERE color1 LIKE ".$_REQUEST["color1"].")
union all (SELECT color2 FROM products WHERE color2 LIKE ".$_REQUEST["color2"].")
union all (SELECT attitude FROM products WHERE attitude LIKE ".$_REQUEST["attitude"].")
GROUP BY ID count(ID) AS hits DESC
ORDER BY hits;";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result))
{
echo $row[ID]." -> ".$row[hits];
}
?>
Lösungsansatz mit php:
PHP:
<?php
$result = mysql_query("SELECT * FROM products LIMIT 0,$max");
$hits;
while ($row = mysql_fetch_assoc($result))
{
$hits[$row["ID"]] = 0;
if($_REQUEST["age"] > $row["age"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["sex"] == $row["sex"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["reason"] == $row["reason"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["music_genre"] == $row["music_genre"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["music_year"] == $row["music_year"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["hobby1"] == $row["hobby1"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["hobby2"] == $row["hobby2"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["color1"] == $row["color1"])
{
$hits[$row["ID"]] +=1;
}
if($_REQUEST["color2"] == $row["color2"])
{
$hits[$row["ID"]] +=1;
}
echo $hits[$row["ID"]];
}
?>
Ich würde das Problem wenn möglich gerne in Mysql lösen, da der Vorgang so schneller abläuft.
Ich hoffe es kann mir jmd Helfen, die Suche sollte nämlich möglichst bis morgen fertig sein.
Danke im Vorraus,
Pascal Jacob