webForumDet fria alternativet

Select distinct och resten?

Databaser & SQL

10 svar · 329 visningar · startad av pettsson

Medlem sedan jan. 20021 122 inlägg
Frågan#1

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?

Medlem sedan dec. 200012 464 inlägg
#2
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
Medlem sedan jan. 20021 122 inlägg
#3

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);
Medlem sedan juni 200032 967 inlägg
#4

Vilken version av MySQL använder du?

Medlem sedan jan. 20021 122 inlägg
#5

4.1.11

Medlem sedan dec. 200012 464 inlägg
#6

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)
Medlem sedan jan. 20021 122 inlägg
#7

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 :/

Medlem sedan juni 200032 967 inlägg
#8

Du kanske har lite mer kod att visa då?

Medlem sedan jan. 20021 122 inlägg
#9

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.

Medlem sedan jan. 20021 122 inlägg
#10

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?

Medlem sedan jan. 20021 122 inlägg
#11

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?

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)