pettssonMedlem sedan jan. 2002777 inlägg
Jag har en databas (MySQL) som innehåller testloggar av kretskort i olika versioner. Jag vill välja ut den senaste versionen av alla kort med hjälp av kolumnen HardwarePartNo, men samtidigt visa den information som finns i alla andra kolumner. Jag prövade med
SELECT DISTINCT HardwarePartNo, [alla andra kolumner] FROM board_test ORDER BY BoardName DESC
Men då får jag ändå med tidigare revisioner av korten. Om jag utesluter [alla andra kolumner] i koden och gör ORDER BY HardwarePartNo så funkar det, men då får jag ju inte med all annan information. Prövade också med pusslande av div. förklaringar i tutorials osv, men kom inte längre för det. Hur ska jag göra?
LarsGMedlem sedan dec. 200012 465 inlägg
SELECT HardwarePartNo, [alla andra kolumner]
FROM board_test bt
where HardwarePartNo in(
select max(HardWarePartNo)
from board_test
where BoardName = bt.board_name)
ORDER BY BoardName DESC
pettssonMedlem sedan jan. 2002777 inlägg
Får "not valid result resource" när jag kör den satsen. Såhär har jag satt in den:
$list = "SELECT HardwarePartNo, BoardName, BoardSerialNo, HardwareRevision, FirmwareRevision, MachineNo FROM board_test bt
WHERE HardwarePartNo IN(SELECT MAX(HardWarePartNo) FROM board_test WHERE BoardName = bt.board_name) ORDER BY HardwarePartNo DESC";
$result = mysql_query($list);
@ndersMedlem sedan juni 200026 914 inlägg
Vilken version av MySQL använder du?
pettssonMedlem sedan jan. 2002777 inlägg
LarsGMedlem sedan dec. 200012 465 inlägg
Lite felhantering skadar inte
$result = mysql_query($list) or die(mysql_error());
Annars så ser jag att jag skrev fel på ett kolumnnamn
WHERE BoardName = bt.board_name)
pettssonMedlem sedan jan. 2002777 inlägg
Hur menar du att du skrev fel? Den kod du skriver i senaste inlägget är identisk med den som du skrev i det första. Ersatte bt.board_name med bt.BoardName som experiment, och nu går det inte att stänga av IE:n som tuggar den sidan, verkar ha kommit in i nån evig loop :/
@ndersMedlem sedan juni 200026 914 inlägg
Du kanske har lite mer kod att visa då?
pettssonMedlem sedan jan. 2002777 inlägg
Jovisst
function ListAll_Test($orderby, $orderad) {
$connection = mysql_connect("localhost", "", "********")
or die("Database error: Could not connect to database");
$mydb = "pcblog";
mysql_select_db($mydb)
or die("Database error: Could not open database");
$list = "SELECT * FROM board_test bt WHERE HardwarePartNo IN(SELECT MAX(HardWarePartNo) FROM board_test WHERE BoardName = bt.BoardName) ORDER BY HardwarePartNo DESC";
$result = mysql_query($list) or
die("Database error: " . mysql_error());
while($row = mysql_fetch_array($result)) {
print "<tr><td>";
print $row["BoardName"] . "</td><td>";
print $row["BoardSerialNo"] . "</td><td>";
print $row["HardwarePartNo"] . "</td><td>";
print $row["FirmwareRevision"] . "</td><td>";
print $row["HardwareRevision"] . "</td><td>";
print $row["MachineNo"] . "</td></tr>";
}
mysql_close($connection);
}
$orderby och $orderad styr vilken kolumn det ska sorteras efter, men de används inte just nu.
pettssonMedlem sedan jan. 2002777 inlägg
Om jag kör max(HardwarePartNo) så får jag tillbaka -834966956, lite underligt... Fältet är av typen unsigned int, största värde är 3460000340, största tillåtna värde är 4294967295. Varför blir det det svaret på max?
pettssonMedlem sedan jan. 2002777 inlägg
Förenklade frågan och visar med detaljerad information på en annan sida. Nu har jag
SELECT DISTINCT HardwarePartNo, BoardName FROM board_test ORDER BY HardwarePartNo DESC
Detta ger nästan rätt... Jag har bla. en artikelgrupp med partno 501066001, denna innehåller 19 stycken kretsvarianter, varav en stavades fel när den lades in. Då kommer 501066001 upp två gånger, en för varje namnvariant. Borde inte DISTINCT sortera bort även den då den används på HardwarePartNo?