Vinnaren i pepparkakshustävlingen!
2012-03-04, 18:30
  #1
Medlem
Hej,

jag vill plocka ut värden från en databas och först välja de kunderna som betalar (payer='1'), sen skriva ut de i slumpmässig ordning. Efter det vill jag att de som inte betalar (payer='0') ska skrivas ut i slumpmässig ordning.

I nuläget gör jag båda sakerna efter varandra vilket genererar en stor mängd kod vilket känns onödigt. Det måste gå att skriva det i en SELECT-funktion tänker jag mig... Vet någon hur?

Såhär ser det alltså ut nu. Vad jag vill åstakomma är alltså en SELECT...

SELECT * from table WHERE kommun='$selected_kommun' AND activated = '1' AND payer='1' ORDER BY rand();

//skriver ut...

SELECT * from table WHERE kommun='$selected_kommun' AND activated = '1' AND payer='0' ORDER BY rand();

//skriver ut
Citera
2012-03-04, 19:45
  #2
Moderator
Protons avatar
PHP -> Databaser /Mod
Citera
2012-03-04, 19:46
  #3
Moderator
Protons avatar
Läs på om hur en UNION funkar så kommer du att kunna lösa problemet i ett nafs.
Citera
2012-03-04, 19:54
  #4
Medlem
snousers avatar
Något i stil med

Kod:
SELECT
  * 
FROM
  (
    (SELECT * from table WHERE payer='1' ORDER BY rand())
    UNION
    (SELECT * from table WHERE payer='0' ORDER BY rand())
  ) total
WHERE
  total.kommun='$selected_kommun' AND
  total.activated = '1'
Citera
2012-03-04, 20:08
  #5
Medlem
Citat:
Ursprungligen postat av snouser
Något i stil med

Kod:
SELECT
  * 
FROM
  (
    (SELECT * from table WHERE payer='1' ORDER BY rand())
    UNION
    (SELECT * from table WHERE payer='0' ORDER BY rand())
  ) total
WHERE
  total.kommun='$selected_kommun' AND
  total.activated = '1'

hmm, jag rpvoade precis det där (inom min $sql="") och det verkar inte fungera. jag får ingen felkod eller så men det visas ingen data...

EDIT: förstår inte riktigt vad "total" har för funktion, är det att man väljer allt från de tabellerna i enlighet med villkoren?
__________________
Senast redigerad av LaCie 2012-03-04 kl. 20:11.
Citera
2012-03-04, 20:09
  #6
Medlem
Bongomans avatar
Annars kan man läsa ut rubbet och sedan sortera på payer genom php-funktionen sort(). Samma resultat och varken mer eller mindre kod.
Citera
2012-03-04, 20:55
  #7
Medlem
Citat:
Ursprungligen postat av Bongoman
Annars kan man läsa ut rubbet och sedan sortera på payer genom php-funktionen sort(). Samma resultat och varken mer eller mindre kod.
Det var också min första tanke men iom att jag redan har en sortering (ORDER BY rand()) så ser jag inte hur det skulle gå till
Citera
2012-03-04, 20:58
  #8
Medlem
snousers avatar
Citat:
Ursprungligen postat av LaCie
hmm, jag rpvoade precis det där (inom min $sql="") och det verkar inte fungera. jag får ingen felkod eller så men det visas ingen data...

EDIT: förstår inte riktigt vad "total" har för funktion, är det att man väljer allt från de tabellerna i enlighet med villkoren?

Kör queryn direkt i konsolen i stället, alternativt PHPMyAdmin – just för att kolla så att queryn fungerar.
Citera
2012-03-04, 21:15
  #9
Medlem
Citat:
Ursprungligen postat av snouser
Kör queryn direkt i konsolen i stället, alternativt PHPMyAdmin – just för att kolla så att queryn fungerar.
Provade att köra det i phpmyadmin. Den körde koden utan att ge mig några fel

EDIT: NVM, det löste sig. Tusen tack!
__________________
Senast redigerad av LaCie 2012-03-04 kl. 21:18.
Citera
2012-03-05, 11:49
  #10
Medlem
Ingen anledning att köra två satser.

Kod:
SELECT CASE WHEN Payer = 1 THEN 1 ELSE 2 END AS [Sort1], 
Rand() AS [Sort2]
FROM Payer
ORDER BY 1, 2

Eller tom ORDER BY Payer DESC, Rand()
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback