This is what I came up with, but I was up late, so I might be totally wrong, LOL!!
Your queries are very different:
1) $sql = 'SELECT DISTINCT Hybridiser FROM ihsreg ORDER BY Hybridiser';
This will just return one field from your table: "Hybridiser"
2) $sql = "SELECT * FROM ihsreg ORDER BY Hybridiser ASC";
This will return ALL (*) fields from your table
Your script AFTER the query is defined uses the function: mysql_fetch_row() and you are attempting to output TWO different row values:
$id = $row[0];
$Hybridiser = $row[6];
This is possible in your 2nd query because you are telling mySQL you want every row returned. This is NOT possible 1st query because you are only asking for one field value to be returned.
You need to tweak your first query if you want to return the IDs, too.
Then it should work.
(This is one reason why I am a BIG fan of the mysql_fetch_array() function: I end up using named keys rather than numerical keys so I can keep things straight.)