2 oder mehr Tabellen miteinander verbinden

rernanded

Erfahrenes Mitglied
Hallo

ich habe 2 Tabellen und möchte die Ausgabe von Werten aus Tabelle B von der Ausgabe von Werten aus A abhängig machen. Erschwerend kommt allerdings hinzu, daß die Ausgaben für beide Tabellen mit rand() erfolgen.

Beispiel:
In Tabelle A gibt es 10 Spalten, Spalte1 bis Spalte10. Und in jeder Spalte steht zB eine Zahl dh in Spalte1 die 1 und in Spalte 2 die 2 usw. Ebenso alles in Tabelle B.
Randomisiert lasse ich mir aus Tabelle A den Wert aus einer der 10 Spalten anzeigen.
Wenn dieser Wert nun kleiner-gleich 5 ist dann soll auch ein Wert kleiner-gleich 5 aus Tabelle B angezeigt werden.

MONI

Hier mein Grundgerüst:

PHP:
$servername = "";
$username = "";
$password = "";
$dbname = "";
$connection = new mysqli($servername, $username, $password, $dbname);
if ($connection->connect_error) {
     die("Connection failed: " . $connection->connect_error);
}

$sql = "SELECT * FROM tabelle_a";
$result = $connection->query($sql);
while($row = $result->fetch_assoc()) {
$items = Array($row["spalte_1"],$row["spalte_2"],$row["spalte_3"], ... usw. ...);
echo $items[array_rand($items)];
}

$sql = "SELECT * FROM tabelle_b";
$result = $connection->query($sql);
while($row = $result->fetch_assoc()) {
$items = Array($row["spalte_1"],$row["spalte_2"],$row["spalte_3"], ... usw. ...);
echo $items[array_rand($items)];
}
 
Bitte in Zukunft mit Tabs arbeiten, damit man sieht wo welche Schleife beginnt und endet.

Dein Datenmodel ist falsch. Die Tabellen sollten nicht in die Breite gehen sondern in die Tiefe. Eine Spalte mit den Werten drin. Dann könnte man das elegant mit SQL lösen.

item: Du kannst deinen 2ten Array mittels Array_filter() nach dem ersten Zufallswert ausfiltern
Etwa so
PHP:
$ersterTreffer = $items[[URL='http://www.php.net/array_rand'][U]array_rand[/U][/URL]($items)];
....
$items2 = Array($row["spalte_1"],$row["spalte_2"],$row["spalte_3"], ... usw. ...);
$items2 = Array_filter(create_function('$v', "return $v < {$ersterTreffer};"), $items2);
 
@Yaslaw
Danke. Ich überdenke mal das "Datenmodel", was ich aber selbst auch schon vermutet hatte.
Die von Dir angeregte Lösung ist aber durchaus brauchbar, nur nicht so elegant.
 
Zurück