webForumDet fria alternativet

DISTINCT

Databaser & SQL

11 svar · 652 visningar · startad av Php

Medlem sedan sep. 2001224 inlägg
Frågan#1

Hej,
Kan någon kolla vad är för fel på följande rad:

$query = mysql_query("SELECT title,eID,postdate(DISTINCT(member_id)) FROM book order by postdate DESC limit 5");

Medlem sedan dec. 200012 464 inlägg
#2

distinct är ingen funktion, det är ett attribut för hela select-listan.

Vad vill du åstadkomma?

Medlem sedan sep. 2001224 inlägg
#3

Jag vill skriva ut de 5 senaste posterna från en tabell, men jag vill inte skriva ut dubbleter från samma användare. Jag vill därför använda DISTINCT för fältet member_id, men jag behöver fortfarande även kunna välja (title, eID, postdate). Min fråga är alltså hur jag för att endast få DISTINCT på member_id, men fortfarande kunna välja andra fält från tabellen.

Medlem sedan dec. 200012 464 inlägg
#4
SELECT title,eID,postdate, member_id
   FROM book b
  where postdate = (select max(postdate)
    from book
   where book.member_id = b.member_id)
  order by postdate DESC 
   limit 5
Medlem sedan sep. 2001224 inlägg
#5

Tack Lars G, fungerar utmärkt. Om du har lika bra koll på inner join passar jag på med en följdfråga.
Jag vill skirva ut medelmmens användarnamn. Nu är det så att i denna tabell (book) så kan jag hämta ID nummer (member_id), men namnet måste jag hämta från en annan tabell, som heter "members" där fältet heter "username".
Hur skulle det se ut om vi lägger till detta?

Medlem sedan dec. 200012 464 inlägg
#6
SELECT title,eID,postdate, username
   FROM book b join members m on b.member_id = m.member_id
  where postdate = (select max(postdate)
    from book
   where book.member_id = b.member_id)
  order by postdate DESC 
   limit 5
Medlem sedan sep. 2001224 inlägg
#7

Tyvärr fungerar det inte riktigt när du lägger till den inner join funktionen, får följande felmeddelande:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

Medlem sedan dec. 200012 464 inlägg
#8

Lägg till ett anrop till mysql_error efter mysql_query så får du ut ett bättre felmeddelande. Du kan ju även testa frågan direkt i något lämpligt verktyg. Jag kan ju ha gissat fel på något kolumnnamn eller så.

Medlem sedan sep. 2001224 inlägg
#9

Hej igen,
Nu uppstod en ny fråga. När jag använder följande sats:

SELECT title,eID,postdate, username
FROM book b join members m on b.member_id = m.member_id
where postdate = (select max(postdate)
from book
where book.member_id = b.member_id)
order by postdate DESC
limit 5

Så är problemet att den inte väljer fältet member_id från tabellen book. Jag försökte lägga till det i slutet där, men får då felmeddelande att satsen är ogiltig. SELECT title,eID,postdate, username**, member_id**

Medlem sedan juni 200032 967 inlägg
#10

Vad får du för felmeddelande?

Medlem sedan sep. 2001224 inlägg
#11

#1052 - Column 'member_id' in field list is ambiguous

Medlem sedan juni 200032 967 inlägg
#12

Om du har det fältet i mer än en tabell måste du berätta vilket du vill hämta ut.

SELECT title,eID,postdate, username, [b]b.[/b]member_id
265 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)