login  Naam:   Wachtwoord: 
Registreer je!
 Forum

query met gecombineerde AND en OR (Opgelost)

Offline Raze - 11/11/2009 13:19
Avatar van RazePHP beginner Hallo,

voor het videosysteem op mijn (toekomstige) website heb ik volgende query gemaakt:

  1. $q = " SELECT
  2. i.video_url,i.video_title,i.video_desc,i.video_tags,i.video_date_add,i.video_time_add,i.video_duration,i.video_capture,i.video_views,c.category_title
  3. FROM
  4. video_information i,video_category c, connection n
  5. WHERE
  6. i.video_id = '".$input['video_id']."'
  7. AND
  8. i.video_category = c.category_id
  9. AND
  10. (n.user_id_ask = '".$input['user_id']."' AND n.user_id_accept = .'".$_SESSION['user_id']."')
  11. OR
  12. (n.user_id_accept = '".$input['user_id']."' AND n.user_id_ask = .'".$_SESSION['user_id']."')
  13.  
  14. ";


Deze werkt niet, maar ik weet al waar de fout zit, namelijk bij die haakjes met AND en OR.

Er zijn 2 users met ID 1 en 2
Wanneer er de combinatie user_id_ask = 1 en user_id_accept = 2 (of omgekeerd) bestaat in de tabel connections wil het zeggen dat ze vrienden zijn en dat ze dus ook elkaars video's kunnen bekijken.
Ik dacht dat dit met deze query mogelijk zou zijn en dat er dus niets werkt opgehaald (door controler met mysqli_num_rows) of dat er wel iets wordt opgehaald als die combinatie (of de tegenovergestelde combinatie) bestaat.

Gaat dit en weet iemand hoe ik de query moet aanpassen? Of kennen jullie een beter (of misschien wel snellere) manier ivm video's blokkeren/tonen wanneer geen/wel vrienden?

4 antwoorden

Gesponsorde links
Offline jaronneke - 11/11/2009 13:22
Avatar van jaronneke MySQL interesse Waarom staat er een puntje voor de .'"

AND n.user_id_accept = .'"
AND n.user_id_ask = .'"

Moet die niet weg?
Offline Richard - 11/11/2009 13:27
Avatar van Richard Crew algemeen Ik weet niet wat de verbinding tussen connection en (video_information || video_category) is, ik ga er maar van uit dat connection een veld video_id bevat. Dit moet je zelf maar goed zien te doen, het moet in elk geval een verbinding hebben anders is die JOIN nutteloos.

  1. $q = "
  2. SELECT i.video_url,
  3. i.video_title,
  4. i.video_desc,
  5. i.video_tags,
  6. i.video_date_add,
  7. i.video_time_add,
  8. i.video_duration,
  9. i.video_capture,
  10. i.video_views,
  11. c.category_title
  12. FROM video_information i
  13. INNER JOIN video_category c
  14. ON i.video_category = c.category_id
  15. INNER JOIN connection n
  16. ON i.video_id = n.video_id
  17. WHERE i.video_id = '".$input['video_id']."'
  18. AND ((n.user_id_ask = '" . $input['user_id'] . "'
  19. AND n.user_id_accept = '" . $_SESSION['user_id'] . "')
  20. OR (n.user_id_accept = '".$input['user_id']."'
  21. AND n.user_id_ask = '" . $_SESSION['user_id'] . "')
  22. )
  23. ";
Offline Raze - 11/11/2009 14:16 (laatste wijziging 11/11/2009 15:57)
Avatar van Raze PHP beginner @richard: nee connection heeft geen veld video_id

connection is de tabel waarin staat wie met wie vrienden is, en aangezien er meerdere video's per user zijn zou dan telkens voor élke video (en foto, notitie, ...) een rij moeten ingevoegd worden.

ik ga wel je query eens grondig doornemen want met JOINS had ik het nog niet bekeken

bedankt

@jaronneke: dat van die punt had ik nog niet gezien dat kan ik idd eens proberen

-------------
EDIT: het eerste probleem is intussen opgelost, nu een tweede  

De resultaten worden door onderstaande query wel opgehaald, maar worden 2 keer weergegeven



  1. public FUNCTION related()
  2. {
  3. // QUERY voorbereiden
  4. $q = " SELECT
  5. i.video_url,i.video_title,i.video_desc,i.video_duration,i.video_capture,c.category_title
  6. FROM
  7. video_information i,video_category c, connection n
  8. WHERE
  9. i.video_tags LIKE '%test%'
  10. AND
  11. i.video_category = c.category_id
  12. AND
  13. ((n.user_id_accept = '".$_SESSION['user_id']."')
  14. OR
  15. (n.user_id_ask = '".$_SESSION['user_id']."'))
  16.  
  17. ";
  18.  
  19. // QUERY uitvoeren
  20. $r = mysqli_query( $this->video_dbc_connection , $q );
  21.  
  22. while( list( $url , $title , $desc , $duration , $capture , $cat_title ) = mysqli_fetch_array( $r , MYSQLI_NUM ) )
  23. {
  24.  
  25. echo '<a href="'.$url.'">'.$title.'</a><br />';
  26.  
  27. }
Offline marten - 11/11/2009 16:22
Avatar van marten Beheerder Vul een array met de waardes welke je al echoed hebt en controleer aan de hand van die array.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.185s