Ich habe zwei Tabellen in einem DB (table_1
und table_2
), Jeder von ihnen hat eine gemeinsame Spalte namens Name
.UNION mit Where - Getting fataler Fehler
ich zur Zeit des folgenden Code verwenden einige Daten zu importieren (Name
, status
) nur von table_1
:
/* database section start */
$mysqli = new mysqli("z","z","z","z");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* database section end */
// Choose Relevant items, and turn them into an array
$item_array = array(
'item1',
'item2',
'item3'
);
//implode items, turn into string
$item_implode = join("','", $item_array);
//declare an overall array for result
$product = array();
$result = $mysqli->query("SELECT Name, Status as status from table_1 where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode');");
while($row = $result->fetch_assoc()) {
$product_name = $row['Name'];
// find all keys in $item_array which value is the products
$keys = array_keys($item_array, $product_name);
foreach ($keys as $key) {
// add values for these keys
$product[$key + 1]["Name"] = $row['Name'];
$product[$key + 1]["status"] = $row['status'];//
}
}
Ich mag auch Daten von table_2
importieren (zB benannten Spalten color
, date_added
)
Mein Ziel ist es, diese Schlüssel zu haben:
$product[$x]["Name"]
$product[$x]["status"]
$product[$x]["color"]
$product[$x]["date_added"]
Ich habe versucht, in dieser Form mit UNION, aber in der letzten Zeile fatalen Fehler bekommen:
$result = $mysqli->query
("(SELECT Name, status as status from table_1 where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode'))
UNION (SELECT color from table_2 where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode'));");
while($row = $result->fetch_assoc()) {
EDIT:
Table_1:
+-------+-------------+------+-----+---------+----------------+
| Name | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Name | varchar(100)| NO | | None | |
| status| varchar(5) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
table_2:
+-------+-------------+------+-----+---------+----------------+
| Name | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Name | varchar(100)| YES | | NULL | |
| color | varchar(5) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
Aktualisierung:
dies versucht, mit:
$result = $mysqli->query
("SELECT Name, status as status, color as color table_1
JOIN table_2 ON table_1.Name=table_2.Name
WHERE table_1.Name IN ('$item_implode')
ORDER BY FIELD (table_1.Name, '$item_implode') ;");
while($row = $result->fetch_assoc()) {
und bekam
Fatal error: Call to a member function fetch_assoc() on a non-object
es ist keine Union, es ist ein Join auf der gemeinsamen Spalte –
@LelioFaieta Ich wurde gesagt, ich sollte Union verwenden ... wie soll ich so ein Join machen, in einer Weise, die meinen ursprünglichen Code nicht zu sehr verändert? – rockyraw
Was sind Ihre Daten? Erstellen Sie eine SQL-Datenbank mit Daten, zeigen Sie die erwarteten Ergebnisse in Tabellenform an. Hilf uns, dir zu helfen. Ansonsten gehen wir zur nächsten Frage über. Und diese altern einfach ab, wenn sie runtergedrückt werden. – Drew