Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


hjälp med SQL relationer och DateDiff

Postades av 2003-01-18 07:44:48 - Robbin Westerlund, i forum mysq, Tråden har 11 Kommentarer och lästs av 948 personer

Har stött på ett problem som jag inte lyckas lösa!

Har en vänner lista där mina vänner skrivs ut... man ska se om de är online osv.
Databasen innehåller 2 tabeller... Profiles och Friends...

Friends ser ut så här

id, MyUserID, FriendUserId

det vill säga jag vill hämta alla poster som har mitt användarID

Select * From Friends WHERE MyUserID = "mittid"

nu kommer det komplicerade och till det riktiga problemet... jag vill hämta användarinfo från "profiles"

alltså:

"SELECT profiles.Username, friends.MyUserId, friends.FriendUserId FROM profiles,friends WHERE friends.MyUserId = "mittid"

sen fortsätter vi, vi med att kontrollera om användaren är Online eller inte, dvs tiden gått ut för honom:

tmpDate = now()

"SELECT profiles.Username, friends.MyUserId, friends.FriendUserId, profiles.OnlineStatus, profiles.OnlineDateTime FROM profiles,friends WHERE friends.MyUserId = "mittid" AND profiles.OnlineStatus = '1' AND profiles.OnlineDateTime > ' "&tmpDate&"'

alltså hämta vänner som har mitt användarId, och dess onlinestatus = 1 och tiden inte gått ut...

det funkar så där... om tiden gått ut skriver han ändå ut användaren som den är ONLINE och när jag försöker göra en liknande SQL string för att skriva ut de som är OFFLINE kruppar den helt... den skulle ju sett ut något typ så här

tmpDate = now()

"SELECT profiles.Username, friends.MyUserId, friends.FriendUserId, profiles.OnlineStatus, profiles.OnlineDateTime FROM profiles,friends WHERE friends.MyUserId = "mittid" AND profiles.OnlineStatus = '0' OR profiles.OnlineDateTime < ' "&tmpDate&"'

hämta vänner som har mitt användareId, och dess onlinestatus = 0 ELLER tiden gått ut

ibland skriver den ut dem flera gånger efter varandra eller inte alls... ibland skriver den ut antal poster som jag har vänner osv...

nån som har tid att kika på detta problem eller ha några tips på lösningar? maila (robbin@terroristsnigeln.com) eller svara här!

Tack på förhand! Hoppas ni förstår ungefär mitt problem och vad jag vill åstakomma?



Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-18 12:49:12 - Andreas Hillqvist

Varför ha två fråger?

SELECT profiles.Username, friends.MyUserId, friends.FriendUserId, (profiles.OnlineStatus = '1' AND profiles.OnlineDateTime > ' "&tmpDate&"') AS Online
FROM friends LEFT JOIN profiles ON friends.FriendUserId = profiles.UserId
WHERE friends.MyUserId = "mittid"
ORDER BY (profiles.OnlineStatus = '1' AND profiles.OnlineDateTime > ' "&tmpDate&"') DESC

Kommer lista alla dina kompisar. Varav det som är online överst.


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-18 18:13:57 - Christoffer Hedgate

Du har fel i dina SQL-fårgor. Du gör en cross join, dvs an multiplicering av alla rader i den ena tabellen med alla i den andra. Sen filtrerar du bort vissa rader, men fortfarande blir det helt fel. Om vi tar den enklaste frågan du hade så kan du själv lägga till det i övriga:

/* Frågan som är fel */
SELECT profiles.Username, friends.MyUserId, friends.FriendUserId FROM profiles,friends WHERE friends.MyUserId = "mittid"

/* Korrekt variant */
SELECT profiles.Username, friends.MyUserId, friends.FriendUserId
FROM profiles, friends
WHERE profiles.UserId = friends.FriendUserId
AND friends.MyUserId = "mittid"

Du måste alltså ange joinvillkor, annars får du en cross join. Om MySQL stödjer ANSI-92 syntax för joins (tror det, men jag kan inte MySQL så jag vet inte) kan du istället skriva så här, det är mycket tydligare:

SELECT profiles.Username, friends.MyUserId, friends.FriendUserId
FROM profiles
INNER JOIN friends
ON profiles.UserId = friends.FriendUserId
WHERE friends.MyUserId = "mittid"

Dock kan du förstås använda Andreas SQL-sats istället för att slippa flera SQL-satser. Dock tycker jag den ser konstig ut, det är möjligt att det fungerar i MySQL men i korrekt SQL skulle den varit:

SELECT profiles.Username
, friends.MyUserId
, friends.FriendUserId
, CASE
WHEN profiles.OnlineStatus = '1' AND profiles.OnlineDateTime > ' "&tmpDate&"'
THEN 1
ELSE 0
END AS Online
FROM friends
INNER JOIN profiles
ON friends.FriendUserId = profiles.UserId
WHERE friends.MyUserId = "mittid"
ORDER BY Online DESC

Jag bytte dessutom LEFT JOIN mot INNER JOIN då det känns mer korrekt, eller?


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-19 02:38:21 - Robbin Westerlund

har testat exemplet... men den skriver ut de som "online" fast tiden gått ut...


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-19 02:40:13 - Robbin Westerlund

exemplen var gjorde ungefär exakt samma sak... har testat båda och båda får samma resultat... tex. en kille har stängt ner browsern utan att trycka på logga ut... hans OnlineStatus blir då "1" men tiden går juh ut efter ett tag... typ 5min och då ska han inte skriva ut honom som "Online" utan "Offline"


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-19 02:47:55 - Robbin Westerlund

kika på www.terroristsnigeln.com/abc/datediff.asp så ser ni problemet

1. killen "shiva" var inloggad för LÄNGE sedan och borde vara offline...
2. "Hell_Is_My_Witness" ska INTE hamna högst upp eftersom han är OFFLINE utan borde då flyttas ner UNDER "shiva" eller med tanke på att den ska sortera efter onlinestatus och tiden?


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-19 22:50:38 - Christoffer Hedgate

Men då måste du ha fel i datan, eller rättare sagt används den inte så som vi antog. Hur sätts OnlineStatus i Profiles? Och datumet, hur sätts det, samt vilket datum använder du i tmpdate?


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-19 22:55:46 - Christoffer Hedgate

OK, nu har jag kollat på din sida, och jag måste säga att jag förstår ingenting. Andreas SQL-sats är som sagt inte korrekt SQL, men det är möjligt att det fungerar i MySQL. Däremot verkade den inte klara av min korrekta SQL-sats, eftersom sorteringen blev helt fel. Kan tänka mig att problemet kan vara något med datumjämförelsen. Var kommer förresten texten Offline och Online ifrån? Jag skulle vilja se resultatet av min fråga, utan nån sorts behandling i ASP, bara själva de sex kolumnerna som returneras.


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-20 08:06:46 - Robbin Westerlund

datumet sparas i databasen som DateTime (dvs. 0000-00-00 00:00:00) och OnlineStatus har tinyint(1) och online är alltså 1 och offline är alltså 0

pratade med en kille och han sa att det fanns nån fält typ där man automatiskt kunde sätta fältet till true eller false... men syndes i databasen som 0 & 1 (där 0 representar false) minns dock inte vad det hette? bin? och det fanns tydligen inte i MySQL

hur vill du att jag ska skriva ut fälten? utan formatering???


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-20 08:12:01 - Robbin Westerlund

så här ser koden ut...

<code>
<%
'FIXAR DATUMET
tmp = DateAdd("n",-5,Now())
tmpDate = Replace(FormatDateTime(tmp, vbShortDate) & " " & FormatDateTime(tmp, 3),"/","-")

'SQL
strSql = "SELECT profiles.OnlineStatus, profiles.OnlineDateTime, profiles.Username, friends.MyUserId, friends.FriendsUserId, CASE WHEN profiles.OnlineStatus = '1' AND profiles.OnlineDateTime > ' "&tmpDate&"' THEN 1 ELSE 0 END AS Online FROM friends INNER JOIN profiles ON friends.FriendsUserId = profiles.UserId WHERE friends.MyUserId = '"&MyId&"' ORDER BY Online DESC"
set ex2 = dbConn.Execute(strSQL)
%>


<%Do Until ex2.EOF%>
<%=ex2("OnlineDateTime")%>
<%=ex2("Username")%>
<%=ex2("OnlineDateTime")%>
<% ex2.MoveNext %>
<%Loop%>
</code>

av den lilla provisoriska tmpDate grejen får jag dagens datum -5 min exakt som det sparas i databasen ex. 2003-01-20 12:20:44





Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-20 11:11:37 - Christoffer Hedgate

OK, vad jag menade var när och hur sätts datumet och onlinestatus i databasen?

Angående datumen tror jag nog du bör använda någon annan jämförelsemetod för datum än strängar så här, det kan hända att datumen representeras på olika sätt. Testa följande:

CASE WHEN profiles.OnlineStatus = '1' AND profiles.OnlineDateTime > CAST('"&tmpDate&"' AS datetime) THEN 1 ELSE 0 END AS Online
eller
CASE WHEN profiles.OnlineStatus = '1' AND DATEDIFF(n, profiles.OnlineDateTime, '"&tmpDate&"') > 0 THEN 1 ELSE 0 END AS Online

Observera att detta är lite SQL Server-syntax, så beroende på hur MySQL hanterar datumjämförelser kanske du måste byta ut denna mot nån MySQL-funktion.

Slutligen skulle jag som sagt vilja se outputen från frågan utan formattering, dvs något i stil med:

<code>
OnlineStatus OnlineDateTime Username MyUserId FriendsUserId Online
1 2002-11-12 00:01:01 namn 1234 4321 1
</code>


Svara

Sv: hjälp med SQL relationer och DateDiff

Postades av 2003-01-20 11:55:57 - Robbin Westerlund

Öj... nu fattar jag... det funkade juh visst... jag som inte fattade det där med AS online riktigt bara... men om jag kontrollerar med den så har den juh satt den till 0 även om tiden gått ut osv... TACK som fan!!!!


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 155
27 952
271 704
651
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies